├── .editorconfig ├── .gitattributes ├── .gitignore ├── .gitmodules ├── .npmignore ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── ThirdPartyNoticeText.txt ├── binding.gyp ├── bindings └── node │ ├── binding.cc │ └── index.js ├── corpus └── spec.txt ├── docs ├── assets │ ├── tree-sitter-playground-0.19.3 │ │ ├── LICENSE │ │ ├── playground.js │ │ └── style.css │ ├── tree-sitter-vue-0.2.1 │ │ └── tree-sitter-vue.wasm │ └── web-tree-sitter-0.19.3 │ │ ├── LICENSE │ │ ├── tree-sitter.js │ │ └── tree-sitter.wasm └── index.html ├── grammar.js ├── package.json ├── scripts ├── generate-playground.js ├── setup-tree-sitter.sh └── update-html-scanner.sh ├── src ├── grammar.json ├── node-types.json ├── parser.c ├── scanner.cc ├── tree_sitter │ └── parser.h └── tree_sitter_html │ ├── scanner.cc │ └── tag.h └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 2 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [corpus/*] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.wasm binary 3 | 4 | /src/** linguist-generated 5 | /src/scanner.* linguist-generated=false 6 | /index.js linguist-generated 7 | /binding.gyp linguist-detectable=false 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /node_modules 3 | 4 | /bindings/rust 5 | /Cargo.toml 6 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "tree-sitter"] 2 | path = tree-sitter 3 | url = https://github.com/ikatyang/tree-sitter 4 | branch = v0.19.3-custom 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikatyang/tree-sitter-vue/91fe2754796cd8fba5f229505a23fa08f3546c06/.npmignore -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: rust 2 | 3 | rust: 4 | - stable 5 | 6 | script: 7 | - if [ ! -d "./tree-sitter/target/release" ]; then bash ./scripts/setup-tree-sitter.sh; fi 8 | - ./tree-sitter/target/release/tree-sitter test 9 | 10 | cache: 11 | cargo: true 12 | directories: 13 | - ./tree-sitter 14 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 4 | 5 | ## [0.2.1](https://github.com/ikatyang/tree-sitter-vue/compare/v0.2.0...v0.2.1) (2021-03-21) 6 | 7 | 8 | ### Bug Fixes 9 | 10 | * add missing binding.gyp ([9bcaadc](https://github.com/ikatyang/tree-sitter-vue/commit/9bcaadc)) 11 | 12 | 13 | 14 | # [0.2.0](https://github.com/ikatyang/tree-sitter-vue/compare/v0.1.0...v0.2.0) (2021-03-14) 15 | 16 | 17 | ### Features 18 | 19 | * upgrade to tree-sitter@0.19.3 ([b74c6e0](https://github.com/ikatyang/tree-sitter-vue/commit/b74c6e0)) 20 | 21 | 22 | ### BREAKING CHANGES 23 | 24 | * require tree-sitter 0.19+ 25 | 26 | 27 | 28 | # 0.1.0 (2019-10-04) 29 | 30 | 31 | ### Features 32 | 33 | * initial implementation ([4da98f7](https://github.com/ikatyang/tree-sitter-vue/commit/4da98f7)) 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Ika (https://github.com/ikatyang) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tree-sitter-vue 2 | 3 | [![npm](https://img.shields.io/npm/v/tree-sitter-vue.svg)](https://www.npmjs.com/package/tree-sitter-vue) 4 | [![build](https://img.shields.io/travis/com/ikatyang/tree-sitter-vue/master.svg)](https://travis-ci.com/ikatyang/tree-sitter-vue/builds) 5 | 6 | Vue ([Vue v2.6.0 Template Syntax](https://vuejs.org/v2/guide/syntax.html)) grammar for [tree-sitter](https://github.com/tree-sitter/tree-sitter) 7 | 8 | _Note: This grammar is not responsible for parsing embedded languages, see [Multi-language Documents](http://tree-sitter.github.io/tree-sitter/using-parsers#multi-language-documents) for more info._ 9 | 10 | [Changelog](https://github.com/ikatyang/tree-sitter-vue/blob/master/CHANGELOG.md) 11 | 12 | ## Install 13 | 14 | ```sh 15 | npm install tree-sitter-vue tree-sitter 16 | ``` 17 | 18 | ## Usage 19 | 20 | ```js 21 | const Parser = require("tree-sitter"); 22 | const Vue = require("tree-sitter-vue"); 23 | 24 | const parser = new Parser(); 25 | parser.setLanguage(Vue); 26 | 27 | const sourceCode = ` 28 | 31 | `; 32 | 33 | const tree = parser.parse(sourceCode); 34 | console.log(tree.rootNode.toString()); 35 | // (component 36 | // (template_element 37 | // (start_tag 38 | // (tag_name)) 39 | // (text) 40 | // (element 41 | // (start_tag 42 | // (tag_name) 43 | // (directive_attribute 44 | // (directive_name) 45 | // (directive_dynamic_argument 46 | // (directive_dynamic_argument_value)) 47 | // (quoted_attribute_value 48 | // (attribute_value)))) 49 | // (interpolation 50 | // (raw_text)) 51 | // (end_tag 52 | // (tag_name))) 53 | // (text) 54 | // (end_tag 55 | // (tag_name)))) 56 | ``` 57 | 58 | ## License 59 | 60 | MIT © [Ika](https://github.com/ikatyang) 61 | -------------------------------------------------------------------------------- /ThirdPartyNoticeText.txt: -------------------------------------------------------------------------------- 1 | This project incorporates third party material from the projects listed below. 2 | The original copyright notice and the license under which we received such third 3 | party material are set forth below. 4 | 5 | ================================================================================ 6 | 7 | tree-sitter-html (https://github.com/tree-sitter/tree-sitter-html) 8 | 9 | The MIT License (MIT) 10 | 11 | Copyright (c) 2014 Max Brunsfeld 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a copy 14 | of this software and associated documentation files (the "Software"), to deal 15 | in the Software without restriction, including without limitation the rights 16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 | copies of the Software, and to permit persons to whom the Software is 18 | furnished to do so, subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in all 21 | copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 | SOFTWARE. 30 | -------------------------------------------------------------------------------- /binding.gyp: -------------------------------------------------------------------------------- 1 | { 2 | "targets": [ 3 | { 4 | "target_name": "tree_sitter_vue_binding", 5 | "include_dirs": [ 6 | " 3 | #include "nan.h" 4 | 5 | using namespace v8; 6 | 7 | extern "C" TSLanguage * tree_sitter_vue(); 8 | 9 | namespace { 10 | 11 | NAN_METHOD(New) {} 12 | 13 | void Init(Local exports, Local module) { 14 | Local tpl = Nan::New(New); 15 | tpl->SetClassName(Nan::New("Language").ToLocalChecked()); 16 | tpl->InstanceTemplate()->SetInternalFieldCount(1); 17 | 18 | Local constructor = Nan::GetFunction(tpl).ToLocalChecked(); 19 | Local instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked(); 20 | Nan::SetInternalFieldPointer(instance, 0, tree_sitter_vue()); 21 | 22 | Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("vue").ToLocalChecked()); 23 | Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); 24 | } 25 | 26 | NODE_MODULE(tree_sitter_vue_binding, Init) 27 | 28 | } // namespace 29 | -------------------------------------------------------------------------------- /bindings/node/index.js: -------------------------------------------------------------------------------- 1 | try { 2 | module.exports = require("../../build/Release/tree_sitter_vue_binding"); 3 | } catch (error1) { 4 | if (error1.code !== 'MODULE_NOT_FOUND') { 5 | throw error1; 6 | } 7 | try { 8 | module.exports = require("../../build/Debug/tree_sitter_vue_binding"); 9 | } catch (error2) { 10 | if (error2.code !== 'MODULE_NOT_FOUND') { 11 | throw error2; 12 | } 13 | throw error1 14 | } 15 | } 16 | 17 | try { 18 | module.exports.nodeTypeInfo = require("../../src/node-types.json"); 19 | } catch (_) {} 20 | -------------------------------------------------------------------------------- /corpus/spec.txt: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | Interpolations - Text (https://vuejs.org/v2/guide/syntax.html#Text) 3 | ================================================================================ 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- 13 | 14 | (component 15 | (template_element 16 | (start_tag 17 | (tag_name)) 18 | (text) 19 | (element 20 | (start_tag 21 | (tag_name)) 22 | (text) 23 | (interpolation 24 | (raw_text)) 25 | (end_tag 26 | (tag_name))) 27 | (text) 28 | (element 29 | (start_tag 30 | (tag_name) 31 | (directive_attribute 32 | (directive_name))) 33 | (text) 34 | (interpolation 35 | (raw_text)) 36 | (end_tag 37 | (tag_name))) 38 | (text) 39 | (end_tag 40 | (tag_name)))) 41 | 42 | ================================================================================ 43 | Interpolations - Raw HTML (https://vuejs.org/v2/guide/syntax.html#Raw-HTML) 44 | ================================================================================ 45 | 46 | 52 | 53 | -------------------------------------------------------------------------------- 54 | 55 | (component 56 | (template_element 57 | (start_tag 58 | (tag_name)) 59 | (text) 60 | (element 61 | (start_tag 62 | (tag_name)) 63 | (text) 64 | (interpolation 65 | (raw_text)) 66 | (end_tag 67 | (tag_name))) 68 | (text) 69 | (element 70 | (start_tag 71 | (tag_name)) 72 | (text) 73 | (element 74 | (start_tag 75 | (tag_name) 76 | (directive_attribute 77 | (directive_name) 78 | (quoted_attribute_value 79 | (attribute_value)))) 80 | (end_tag 81 | (tag_name))) 82 | (end_tag 83 | (tag_name))) 84 | (text) 85 | (end_tag 86 | (tag_name)))) 87 | 88 | ================================================================================ 89 | Interpolations - Attributes (https://vuejs.org/v2/guide/syntax.html#Attributes) 90 | ================================================================================ 91 | 92 | 98 | 99 | -------------------------------------------------------------------------------- 100 | 101 | (component 102 | (template_element 103 | (start_tag 104 | (tag_name)) 105 | (text) 106 | (element 107 | (start_tag 108 | (tag_name) 109 | (directive_attribute 110 | (directive_name) 111 | (directive_argument) 112 | (quoted_attribute_value 113 | (attribute_value)))) 114 | (end_tag 115 | (tag_name))) 116 | (text) 117 | (element 118 | (start_tag 119 | (tag_name) 120 | (directive_attribute 121 | (directive_name) 122 | (directive_argument) 123 | (quoted_attribute_value 124 | (attribute_value)))) 125 | (text) 126 | (end_tag 127 | (tag_name))) 128 | (text) 129 | (end_tag 130 | (tag_name)))) 131 | 132 | ================================================================================ 133 | Interpolations - Using JavaScript Expressions (https://vuejs.org/v2/guide/syntax.html#Using-JavaScript-Expressions) 134 | ================================================================================ 135 | 136 | 153 | 154 | -------------------------------------------------------------------------------- 155 | 156 | (component 157 | (template_element 158 | (start_tag 159 | (tag_name)) 160 | (text) 161 | (interpolation 162 | (raw_text)) 163 | (text) 164 | (interpolation 165 | (raw_text)) 166 | (text) 167 | (interpolation 168 | (raw_text)) 169 | (text) 170 | (element 171 | (start_tag 172 | (tag_name) 173 | (directive_attribute 174 | (directive_name) 175 | (directive_argument) 176 | (quoted_attribute_value 177 | (attribute_value)))) 178 | (end_tag 179 | (tag_name))) 180 | (text) 181 | (comment) 182 | (text) 183 | (interpolation 184 | (raw_text)) 185 | (text) 186 | (comment) 187 | (text) 188 | (interpolation 189 | (raw_text)) 190 | (text) 191 | (end_tag 192 | (tag_name)))) 193 | 194 | ================================================================================ 195 | Directives - Directives (https://vuejs.org/v2/guide/syntax.html#Directives) 196 | ================================================================================ 197 | 198 | 203 | 204 | -------------------------------------------------------------------------------- 205 | 206 | (component 207 | (template_element 208 | (start_tag 209 | (tag_name)) 210 | (text) 211 | (element 212 | (start_tag 213 | (tag_name) 214 | (directive_attribute 215 | (directive_name) 216 | (quoted_attribute_value 217 | (attribute_value)))) 218 | (text) 219 | (end_tag 220 | (tag_name))) 221 | (text) 222 | (end_tag 223 | (tag_name)))) 224 | 225 | ================================================================================ 226 | Directives - Arguments (https://vuejs.org/v2/guide/syntax.html#Arguments) 227 | ================================================================================ 228 | 229 | 235 | 236 | -------------------------------------------------------------------------------- 237 | 238 | (component 239 | (template_element 240 | (start_tag 241 | (tag_name)) 242 | (text) 243 | (element 244 | (start_tag 245 | (tag_name) 246 | (directive_attribute 247 | (directive_name) 248 | (directive_argument) 249 | (quoted_attribute_value 250 | (attribute_value)))) 251 | (text) 252 | (end_tag 253 | (tag_name))) 254 | (text) 255 | (element 256 | (start_tag 257 | (tag_name) 258 | (directive_attribute 259 | (directive_name) 260 | (directive_argument) 261 | (quoted_attribute_value 262 | (attribute_value)))) 263 | (text) 264 | (end_tag 265 | (tag_name))) 266 | (text) 267 | (end_tag 268 | (tag_name)))) 269 | 270 | ================================================================================ 271 | Directives - Dynamic Arguments (https://vuejs.org/v2/guide/syntax.html#Dynamic-Arguments) 272 | ================================================================================ 273 | 274 | 287 | 288 | -------------------------------------------------------------------------------- 289 | 290 | (component 291 | (template_element 292 | (start_tag 293 | (tag_name)) 294 | (text) 295 | (comment) 296 | (text) 297 | (element 298 | (start_tag 299 | (tag_name) 300 | (directive_attribute 301 | (directive_name) 302 | (directive_dynamic_argument 303 | (directive_dynamic_argument_value)) 304 | (quoted_attribute_value 305 | (attribute_value)))) 306 | (text) 307 | (end_tag 308 | (tag_name))) 309 | (text) 310 | (element 311 | (start_tag 312 | (tag_name) 313 | (directive_attribute 314 | (directive_name) 315 | (directive_dynamic_argument 316 | (directive_dynamic_argument_value)) 317 | (quoted_attribute_value 318 | (attribute_value)))) 319 | (text) 320 | (end_tag 321 | (tag_name))) 322 | (text) 323 | (comment) 324 | (text) 325 | (element 326 | (start_tag 327 | (tag_name) 328 | (directive_attribute 329 | (directive_name) 330 | (directive_dynamic_argument 331 | (ERROR 332 | (UNEXPECTED 'f') 333 | (UNEXPECTED '+'))) 334 | (quoted_attribute_value 335 | (attribute_value)))) 336 | (text) 337 | (end_tag 338 | (tag_name))) 339 | (text) 340 | (end_tag 341 | (tag_name)))) 342 | 343 | ================================================================================ 344 | Directives - Modifiers (https://vuejs.org/v2/guide/syntax.html#Modifiers) 345 | ================================================================================ 346 | 347 | 352 | 353 | -------------------------------------------------------------------------------- 354 | 355 | (component 356 | (template_element 357 | (start_tag 358 | (tag_name)) 359 | (text) 360 | (element 361 | (start_tag 362 | (tag_name) 363 | (directive_attribute 364 | (directive_name) 365 | (directive_argument) 366 | (directive_modifiers 367 | (directive_modifier)) 368 | (quoted_attribute_value 369 | (attribute_value)))) 370 | (text) 371 | (end_tag 372 | (tag_name))) 373 | (text) 374 | (end_tag 375 | (tag_name)))) 376 | 377 | ================================================================================ 378 | Shorthands - v-bind Shorthand (https://vuejs.org/v2/guide/syntax.html#v-bind-Shorthand) 379 | ================================================================================ 380 | 381 | 393 | 394 | -------------------------------------------------------------------------------- 395 | 396 | (component 397 | (template_element 398 | (start_tag 399 | (tag_name)) 400 | (text) 401 | (comment) 402 | (text) 403 | (element 404 | (start_tag 405 | (tag_name) 406 | (directive_attribute 407 | (directive_name) 408 | (directive_argument) 409 | (quoted_attribute_value 410 | (attribute_value)))) 411 | (text) 412 | (end_tag 413 | (tag_name))) 414 | (text) 415 | (comment) 416 | (text) 417 | (element 418 | (start_tag 419 | (tag_name) 420 | (directive_attribute 421 | (directive_name) 422 | (directive_argument) 423 | (quoted_attribute_value 424 | (attribute_value)))) 425 | (text) 426 | (end_tag 427 | (tag_name))) 428 | (text) 429 | (comment) 430 | (text) 431 | (element 432 | (start_tag 433 | (tag_name) 434 | (directive_attribute 435 | (directive_name) 436 | (directive_dynamic_argument 437 | (directive_dynamic_argument_value)) 438 | (quoted_attribute_value 439 | (attribute_value)))) 440 | (text) 441 | (end_tag 442 | (tag_name))) 443 | (text) 444 | (end_tag 445 | (tag_name)))) 446 | 447 | ================================================================================ 448 | Shorthands - v-on Shorthand (https://vuejs.org/v2/guide/syntax.html#v-on-Shorthand) 449 | ================================================================================ 450 | 451 | 463 | 464 | -------------------------------------------------------------------------------- 465 | 466 | (component 467 | (template_element 468 | (start_tag 469 | (tag_name)) 470 | (text) 471 | (comment) 472 | (text) 473 | (element 474 | (start_tag 475 | (tag_name) 476 | (directive_attribute 477 | (directive_name) 478 | (directive_argument) 479 | (quoted_attribute_value 480 | (attribute_value)))) 481 | (text) 482 | (end_tag 483 | (tag_name))) 484 | (text) 485 | (comment) 486 | (text) 487 | (element 488 | (start_tag 489 | (tag_name) 490 | (directive_attribute 491 | (directive_name) 492 | (directive_argument) 493 | (quoted_attribute_value 494 | (attribute_value)))) 495 | (text) 496 | (end_tag 497 | (tag_name))) 498 | (text) 499 | (comment) 500 | (text) 501 | (element 502 | (start_tag 503 | (tag_name) 504 | (directive_attribute 505 | (directive_name) 506 | (directive_dynamic_argument 507 | (directive_dynamic_argument_value)) 508 | (quoted_attribute_value 509 | (attribute_value)))) 510 | (text) 511 | (end_tag 512 | (tag_name))) 513 | (text) 514 | (end_tag 515 | (tag_name)))) 516 | -------------------------------------------------------------------------------- /docs/assets/tree-sitter-playground-0.19.3/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Max Brunsfeld 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/assets/tree-sitter-playground-0.19.3/playground.js: -------------------------------------------------------------------------------- 1 | let tree; 2 | 3 | (async () => { 4 | const CAPTURE_REGEX = /@\s*([\w\._-]+)/g; 5 | const COLORS_BY_INDEX = [ 6 | 'blue', 7 | 'chocolate', 8 | 'darkblue', 9 | 'darkcyan', 10 | 'darkgreen', 11 | 'darkred', 12 | 'darkslategray', 13 | 'dimgray', 14 | 'green', 15 | 'indigo', 16 | 'navy', 17 | 'red', 18 | 'sienna', 19 | ]; 20 | 21 | const scriptURL = document.currentScript.getAttribute('src'); 22 | 23 | const codeInput = document.getElementById('code-input'); 24 | const languageSelect = document.getElementById('language-select'); 25 | const loggingCheckbox = document.getElementById('logging-checkbox'); 26 | const outputContainer = document.getElementById('output-container'); 27 | const outputContainerScroll = document.getElementById('output-container-scroll'); 28 | const playgroundContainer = document.getElementById('playground-container'); 29 | const queryCheckbox = document.getElementById('query-checkbox'); 30 | const queryContainer = document.getElementById('query-container'); 31 | const queryInput = document.getElementById('query-input'); 32 | const updateTimeSpan = document.getElementById('update-time'); 33 | const languagesByName = {}; 34 | 35 | loadState(); 36 | 37 | await TreeSitter.init(); 38 | 39 | const parser = new TreeSitter(); 40 | const codeEditor = CodeMirror.fromTextArea(codeInput, { 41 | lineNumbers: true, 42 | showCursorWhenSelecting: true 43 | }); 44 | 45 | const queryEditor = CodeMirror.fromTextArea(queryInput, { 46 | lineNumbers: true, 47 | showCursorWhenSelecting: true 48 | }); 49 | 50 | const cluster = new Clusterize({ 51 | rows: [], 52 | noDataText: null, 53 | contentElem: outputContainer, 54 | scrollElem: outputContainerScroll 55 | }); 56 | const renderTreeOnCodeChange = debounce(renderTree, 50); 57 | const saveStateOnChange = debounce(saveState, 2000); 58 | const runTreeQueryOnChange = debounce(runTreeQuery, 50); 59 | 60 | let languageName = languageSelect.value; 61 | let treeRows = null; 62 | let treeRowHighlightedIndex = -1; 63 | let parseCount = 0; 64 | let isRendering = 0; 65 | let query; 66 | 67 | codeEditor.on('changes', handleCodeChange); 68 | codeEditor.on('viewportChange', runTreeQueryOnChange); 69 | codeEditor.on('cursorActivity', debounce(handleCursorMovement, 150)); 70 | queryEditor.on('changes', debounce(handleQueryChange, 150)); 71 | 72 | loggingCheckbox.addEventListener('change', handleLoggingChange); 73 | queryCheckbox.addEventListener('change', handleQueryEnableChange); 74 | languageSelect.addEventListener('change', handleLanguageChange); 75 | outputContainer.addEventListener('click', handleTreeClick); 76 | 77 | handleQueryEnableChange(); 78 | await handleLanguageChange() 79 | 80 | playgroundContainer.style.visibility = 'visible'; 81 | 82 | async function handleLanguageChange() { 83 | const newLanguageName = languageSelect.value; 84 | if (!languagesByName[newLanguageName]) { 85 | const url = `${LANGUAGE_BASE_URL}/tree-sitter-${newLanguageName}.wasm` 86 | languageSelect.disabled = true; 87 | try { 88 | languagesByName[newLanguageName] = await TreeSitter.Language.load(url); 89 | } catch (e) { 90 | console.error(e); 91 | languageSelect.value = languageName; 92 | return 93 | } finally { 94 | languageSelect.disabled = false; 95 | } 96 | } 97 | 98 | tree = null; 99 | languageName = newLanguageName; 100 | parser.setLanguage(languagesByName[newLanguageName]); 101 | handleCodeChange(); 102 | handleQueryChange(); 103 | } 104 | 105 | async function handleCodeChange(editor, changes) { 106 | const newText = codeEditor.getValue(); 107 | const edits = tree && changes && changes.map(treeEditForEditorChange); 108 | 109 | const start = performance.now(); 110 | if (edits) { 111 | for (const edit of edits) { 112 | tree.edit(edit); 113 | } 114 | } 115 | const newTree = parser.parse(newText, tree); 116 | const duration = (performance.now() - start).toFixed(1); 117 | 118 | updateTimeSpan.innerText = `${duration} ms`; 119 | if (tree) tree.delete(); 120 | tree = newTree; 121 | parseCount++; 122 | renderTreeOnCodeChange(); 123 | runTreeQueryOnChange(); 124 | saveStateOnChange(); 125 | } 126 | 127 | async function renderTree() { 128 | isRendering++; 129 | const cursor = tree.walk(); 130 | 131 | let currentRenderCount = parseCount; 132 | let row = ''; 133 | let rows = []; 134 | let finishedRow = false; 135 | let visitedChildren = false; 136 | let indentLevel = 0; 137 | 138 | for (let i = 0;; i++) { 139 | if (i > 0 && i % 10000 === 0) { 140 | await new Promise(r => setTimeout(r, 0)); 141 | if (parseCount !== currentRenderCount) { 142 | cursor.delete(); 143 | isRendering--; 144 | return; 145 | } 146 | } 147 | 148 | let displayName; 149 | if (cursor.nodeIsMissing) { 150 | displayName = `MISSING ${cursor.nodeType}` 151 | } else if (cursor.nodeIsNamed) { 152 | displayName = cursor.nodeType; 153 | } 154 | 155 | if (visitedChildren) { 156 | if (displayName) { 157 | finishedRow = true; 158 | } 159 | 160 | if (cursor.gotoNextSibling()) { 161 | visitedChildren = false; 162 | } else if (cursor.gotoParent()) { 163 | visitedChildren = true; 164 | indentLevel--; 165 | } else { 166 | break; 167 | } 168 | } else { 169 | if (displayName) { 170 | if (finishedRow) { 171 | row += ''; 172 | rows.push(row); 173 | finishedRow = false; 174 | } 175 | const start = cursor.startPosition; 176 | const end = cursor.endPosition; 177 | const id = cursor.nodeId; 178 | let fieldName = cursor.currentFieldName(); 179 | if (fieldName) { 180 | fieldName += ': '; 181 | } else { 182 | fieldName = ''; 183 | } 184 | row = `
${' '.repeat(indentLevel)}${fieldName}${displayName} [${start.row}, ${start.column}] - [${end.row}, ${end.column}])`; 185 | finishedRow = true; 186 | } 187 | 188 | if (cursor.gotoFirstChild()) { 189 | visitedChildren = false; 190 | indentLevel++; 191 | } else { 192 | visitedChildren = true; 193 | } 194 | } 195 | } 196 | if (finishedRow) { 197 | row += '
'; 198 | rows.push(row); 199 | } 200 | 201 | cursor.delete(); 202 | cluster.update(rows); 203 | treeRows = rows; 204 | isRendering--; 205 | handleCursorMovement(); 206 | } 207 | 208 | function runTreeQuery(_, startRow, endRow) { 209 | if (endRow == null) { 210 | const viewport = codeEditor.getViewport(); 211 | startRow = viewport.from; 212 | endRow = viewport.to; 213 | } 214 | 215 | codeEditor.operation(() => { 216 | const marks = codeEditor.getAllMarks(); 217 | marks.forEach(m => m.clear()); 218 | 219 | if (tree && query) { 220 | const captures = query.captures( 221 | tree.rootNode, 222 | {row: startRow, column: 0}, 223 | {row: endRow, column: 0}, 224 | ); 225 | let lastNodeId; 226 | for (const {name, node} of captures) { 227 | if (node.id === lastNodeId) continue; 228 | lastNodeId = node.id; 229 | const {startPosition, endPosition} = node; 230 | codeEditor.markText( 231 | {line: startPosition.row, ch: startPosition.column}, 232 | {line: endPosition.row, ch: endPosition.column}, 233 | { 234 | inclusiveLeft: true, 235 | inclusiveRight: true, 236 | css: `color: ${colorForCaptureName(name)}` 237 | } 238 | ); 239 | } 240 | } 241 | }); 242 | } 243 | 244 | function handleQueryChange() { 245 | if (query) { 246 | query.delete(); 247 | query.deleted = true; 248 | query = null; 249 | } 250 | 251 | queryEditor.operation(() => { 252 | queryEditor.getAllMarks().forEach(m => m.clear()); 253 | if (!queryCheckbox.checked) return; 254 | 255 | const queryText = queryEditor.getValue(); 256 | 257 | try { 258 | query = parser.getLanguage().query(queryText); 259 | let match; 260 | 261 | let row = 0; 262 | queryEditor.eachLine((line) => { 263 | while (match = CAPTURE_REGEX.exec(line.text)) { 264 | queryEditor.markText( 265 | {line: row, ch: match.index}, 266 | {line: row, ch: match.index + match[0].length}, 267 | { 268 | inclusiveLeft: true, 269 | inclusiveRight: true, 270 | css: `color: ${colorForCaptureName(match[1])}` 271 | } 272 | ); 273 | } 274 | row++; 275 | }); 276 | } catch (error) { 277 | const startPosition = queryEditor.posFromIndex(error.index); 278 | const endPosition = { 279 | line: startPosition.line, 280 | ch: startPosition.ch + (error.length || Infinity) 281 | }; 282 | 283 | if (error.index === queryText.length) { 284 | if (startPosition.ch > 0) { 285 | startPosition.ch--; 286 | } else if (startPosition.row > 0) { 287 | startPosition.row--; 288 | startPosition.column = Infinity; 289 | } 290 | } 291 | 292 | queryEditor.markText( 293 | startPosition, 294 | endPosition, 295 | { 296 | className: 'query-error', 297 | inclusiveLeft: true, 298 | inclusiveRight: true, 299 | attributes: {title: error.message} 300 | } 301 | ); 302 | } 303 | }); 304 | 305 | runTreeQuery(); 306 | saveQueryState(); 307 | } 308 | 309 | function handleCursorMovement() { 310 | if (isRendering) return; 311 | 312 | const selection = codeEditor.getDoc().listSelections()[0]; 313 | let start = {row: selection.anchor.line, column: selection.anchor.ch}; 314 | let end = {row: selection.head.line, column: selection.head.ch}; 315 | if ( 316 | start.row > end.row || 317 | ( 318 | start.row === end.row && 319 | start.column > end.column 320 | ) 321 | ) { 322 | let swap = end; 323 | end = start; 324 | start = swap; 325 | } 326 | const node = tree.rootNode.namedDescendantForPosition(start, end); 327 | if (treeRows) { 328 | if (treeRowHighlightedIndex !== -1) { 329 | const row = treeRows[treeRowHighlightedIndex]; 330 | if (row) treeRows[treeRowHighlightedIndex] = row.replace('highlighted', 'plain'); 331 | } 332 | treeRowHighlightedIndex = treeRows.findIndex(row => row.includes(`data-id=${node.id}`)); 333 | if (treeRowHighlightedIndex !== -1) { 334 | const row = treeRows[treeRowHighlightedIndex]; 335 | if (row) treeRows[treeRowHighlightedIndex] = row.replace('plain', 'highlighted'); 336 | } 337 | cluster.update(treeRows); 338 | const lineHeight = cluster.options.item_height; 339 | const scrollTop = outputContainerScroll.scrollTop; 340 | const containerHeight = outputContainerScroll.clientHeight; 341 | const offset = treeRowHighlightedIndex * lineHeight; 342 | if (scrollTop > offset - 20) { 343 | $(outputContainerScroll).animate({scrollTop: offset - 20}, 150); 344 | } else if (scrollTop < offset + lineHeight + 40 - containerHeight) { 345 | $(outputContainerScroll).animate({scrollTop: offset - containerHeight + 40}, 150); 346 | } 347 | } 348 | } 349 | 350 | function handleTreeClick(event) { 351 | if (event.target.tagName === 'A') { 352 | event.preventDefault(); 353 | const [startRow, startColumn, endRow, endColumn] = event 354 | .target 355 | .dataset 356 | .range 357 | .split(',') 358 | .map(n => parseInt(n)); 359 | codeEditor.focus(); 360 | codeEditor.setSelection( 361 | {line: startRow, ch: startColumn}, 362 | {line: endRow, ch: endColumn} 363 | ); 364 | } 365 | } 366 | 367 | function handleLoggingChange() { 368 | if (loggingCheckbox.checked) { 369 | parser.setLogger((message, lexing) => { 370 | if (lexing) { 371 | console.log(" ", message) 372 | } else { 373 | console.log(message) 374 | } 375 | }); 376 | } else { 377 | parser.setLogger(null); 378 | } 379 | } 380 | 381 | function handleQueryEnableChange() { 382 | if (queryCheckbox.checked) { 383 | queryContainer.style.visibility = ''; 384 | queryContainer.style.position = ''; 385 | } else { 386 | queryContainer.style.visibility = 'hidden'; 387 | queryContainer.style.position = 'absolute'; 388 | } 389 | handleQueryChange(); 390 | } 391 | 392 | function treeEditForEditorChange(change) { 393 | const oldLineCount = change.removed.length; 394 | const newLineCount = change.text.length; 395 | const lastLineLength = change.text[newLineCount - 1].length; 396 | 397 | const startPosition = {row: change.from.line, column: change.from.ch}; 398 | const oldEndPosition = {row: change.to.line, column: change.to.ch}; 399 | const newEndPosition = { 400 | row: startPosition.row + newLineCount - 1, 401 | column: newLineCount === 1 402 | ? startPosition.column + lastLineLength 403 | : lastLineLength 404 | }; 405 | 406 | const startIndex = codeEditor.indexFromPos(change.from); 407 | let newEndIndex = startIndex + newLineCount - 1; 408 | let oldEndIndex = startIndex + oldLineCount - 1; 409 | for (let i = 0; i < newLineCount; i++) newEndIndex += change.text[i].length; 410 | for (let i = 0; i < oldLineCount; i++) oldEndIndex += change.removed[i].length; 411 | 412 | return { 413 | startIndex, oldEndIndex, newEndIndex, 414 | startPosition, oldEndPosition, newEndPosition 415 | }; 416 | } 417 | 418 | function colorForCaptureName(capture) { 419 | const id = query.captureNames.indexOf(capture); 420 | return COLORS_BY_INDEX[id % COLORS_BY_INDEX.length]; 421 | } 422 | 423 | function getLocalStorageItem(key) { 424 | return localStorage.getItem(`${document.title}:${key}`); 425 | } 426 | 427 | function setLocalStorageItem(key, value) { 428 | localStorage.setItem(`${document.title}:${key}`, value); 429 | } 430 | 431 | function loadState() { 432 | const language = getLocalStorageItem("language"); 433 | const sourceCode = getLocalStorageItem("sourceCode"); 434 | const query = getLocalStorageItem("query"); 435 | const queryEnabled = getLocalStorageItem("queryEnabled"); 436 | if (language != null && sourceCode != null && query != null) { 437 | queryInput.value = query; 438 | codeInput.value = sourceCode; 439 | languageSelect.value = language; 440 | queryCheckbox.checked = (queryEnabled === 'true'); 441 | } 442 | } 443 | 444 | function saveState() { 445 | setLocalStorageItem("language", languageSelect.value); 446 | setLocalStorageItem("sourceCode", codeEditor.getValue()); 447 | saveQueryState(); 448 | } 449 | 450 | function saveQueryState() { 451 | setLocalStorageItem("queryEnabled", queryCheckbox.checked); 452 | setLocalStorageItem("query", queryEditor.getValue()); 453 | } 454 | 455 | function debounce(func, wait, immediate) { 456 | var timeout; 457 | return function() { 458 | var context = this, args = arguments; 459 | var later = function() { 460 | timeout = null; 461 | if (!immediate) func.apply(context, args); 462 | }; 463 | var callNow = immediate && !timeout; 464 | clearTimeout(timeout); 465 | timeout = setTimeout(later, wait); 466 | if (callNow) func.apply(context, args); 467 | }; 468 | } 469 | })(); 470 | -------------------------------------------------------------------------------- /docs/assets/tree-sitter-playground-0.19.3/style.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight .cm{color:#999988;font-style:italic}.highlight .cp{color:#999999;font-weight:bold}.highlight .c1{color:#999988;font-style:italic}.highlight .cs{color:#999999;font-weight:bold;font-style:italic}.highlight .c,.highlight .cd{color:#999988;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .gd{color:#000000;background-color:#ffdddd}.highlight .ge{color:#000000;font-style:italic}.highlight .gr{color:#aa0000}.highlight .gh{color:#999999}.highlight .gi{color:#000000;background-color:#ddffdd}.highlight .go{color:#888888}.highlight .gp{color:#555555}.highlight .gs{font-weight:bold}.highlight .gu{color:#aaaaaa}.highlight .gt{color:#aa0000}.highlight .kc{color:#000000;font-weight:bold}.highlight .kd{color:#000000;font-weight:bold}.highlight .kn{color:#000000;font-weight:bold}.highlight .kp{color:#000000;font-weight:bold}.highlight .kr{color:#000000;font-weight:bold}.highlight .kt{color:#445588;font-weight:bold}.highlight .k,.highlight .kv{color:#000000;font-weight:bold}.highlight .mf{color:#009999}.highlight .mh{color:#009999}.highlight .il{color:#009999}.highlight .mi{color:#009999}.highlight .mo{color:#009999}.highlight .m,.highlight .mb,.highlight .mx{color:#009999}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .s{color:#d14}.highlight .na{color:#008080}.highlight .bp{color:#999999}.highlight .nb{color:#0086B3}.highlight .nc{color:#445588;font-weight:bold}.highlight .no{color:#008080}.highlight .nd{color:#3c5d5d;font-weight:bold}.highlight .ni{color:#800080}.highlight .ne{color:#990000;font-weight:bold}.highlight .nf{color:#990000;font-weight:bold}.highlight .nl{color:#990000;font-weight:bold}.highlight .nn{color:#555555}.highlight .nt{color:#000080}.highlight .vc{color:#008080}.highlight .vg{color:#008080}.highlight .vi{color:#008080}.highlight .nv{color:#008080}.highlight .ow{color:#000000;font-weight:bold}.highlight .o{color:#000000;font-weight:bold}.highlight .w{color:#bbbbbb}.highlight{background-color:#f8f8f8}*{box-sizing:border-box}body{padding:0;margin:0;font-family:"Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;line-height:1.5;color:#606c71}a{color:#1e6bb8;text-decoration:none}a:hover{text-decoration:underline}.btn{display:inline-block;margin-bottom:1rem;color:rgba(255,255,255,0.7);background-color:rgba(255,255,255,0.08);border-color:rgba(255,255,255,0.2);border-style:solid;border-width:1px;border-radius:0.3rem;transition:color 0.2s, background-color 0.2s, border-color 0.2s}.btn:hover{color:rgba(255,255,255,0.8);text-decoration:none;background-color:rgba(255,255,255,0.2);border-color:rgba(255,255,255,0.3)}.btn+.btn{margin-left:1rem}@media screen and (min-width: 64em){.btn{padding:0.75rem 1rem}}@media screen and (min-width: 42em) and (max-width: 64em){.btn{padding:0.6rem 0.9rem;font-size:0.9rem}}@media screen and (max-width: 42em){.btn{display:block;width:100%;padding:0.75rem;font-size:0.9rem}.btn+.btn{margin-top:1rem;margin-left:0}}.page-header{color:#fff;text-align:center;background-color:#159957;background-image:linear-gradient(120deg, #155799, #159957)}@media screen and (min-width: 64em){.page-header{padding:5rem 6rem}}@media screen and (min-width: 42em) and (max-width: 64em){.page-header{padding:3rem 4rem}}@media screen and (max-width: 42em){.page-header{padding:2rem 1rem}}.project-name{margin-top:0;margin-bottom:0.1rem}@media screen and (min-width: 64em){.project-name{font-size:3.25rem}}@media screen and (min-width: 42em) and (max-width: 64em){.project-name{font-size:2.25rem}}@media screen and (max-width: 42em){.project-name{font-size:1.75rem}}.project-tagline{margin-bottom:2rem;font-weight:normal;opacity:0.7}@media screen and (min-width: 64em){.project-tagline{font-size:1.25rem}}@media screen and (min-width: 42em) and (max-width: 64em){.project-tagline{font-size:1.15rem}}@media screen and (max-width: 42em){.project-tagline{font-size:1rem}}.main-content{word-wrap:break-word}.main-content :first-child{margin-top:0}@media screen and (min-width: 64em){.main-content{max-width:64rem;padding:2rem 6rem;margin:0 auto;font-size:1.1rem}}@media screen and (min-width: 42em) and (max-width: 64em){.main-content{padding:2rem 4rem;font-size:1.1rem}}@media screen and (max-width: 42em){.main-content{padding:2rem 1rem;font-size:1rem}}.main-content img{max-width:100%}.main-content h1,.main-content h2,.main-content h3,.main-content h4,.main-content h5,.main-content h6{margin-top:2rem;margin-bottom:1rem;font-weight:normal;color:#159957}.main-content p{margin-bottom:1em}.main-content code{padding:2px 4px;font-family:Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size:0.9rem;color:#567482;background-color:#f3f6fa;border-radius:0.3rem}.main-content pre{padding:0.8rem;margin-top:0;margin-bottom:1rem;font:1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;color:#567482;word-wrap:normal;background-color:#f3f6fa;border:solid 1px #dce6f0;border-radius:0.3rem}.main-content pre>code{padding:0;margin:0;font-size:0.9rem;color:#567482;word-break:normal;white-space:pre;background:transparent;border:0}.main-content .highlight{margin-bottom:1rem}.main-content .highlight pre{margin-bottom:0;word-break:normal}.main-content .highlight pre,.main-content pre{padding:0.8rem;overflow:auto;font-size:0.9rem;line-height:1.45;border-radius:0.3rem;-webkit-overflow-scrolling:touch}.main-content pre code,.main-content pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.main-content pre code:before,.main-content pre code:after,.main-content pre tt:before,.main-content pre tt:after{content:normal}.main-content ul,.main-content ol{margin-top:0}.main-content blockquote{padding:0 1rem;margin-left:0;color:#819198;border-left:0.3rem solid #dce6f0}.main-content blockquote>:first-child{margin-top:0}.main-content blockquote>:last-child{margin-bottom:0}.main-content table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all;-webkit-overflow-scrolling:touch}.main-content table th{font-weight:bold}.main-content table th,.main-content table td{padding:0.5rem 1rem;border:1px solid #e9ebec}.main-content dl{padding:0}.main-content dl dt{padding:0;margin-top:1rem;font-size:1rem;font-weight:bold}.main-content dl dd{padding:0;margin-bottom:1rem}.main-content hr{height:2px;padding:0;margin:1rem 0;background-color:#eff0f1;border:0}.site-footer{padding-top:2rem;margin-top:2rem;border-top:solid 1px #eff0f1}@media screen and (min-width: 64em){.site-footer{font-size:1rem}}@media screen and (min-width: 42em) and (max-width: 64em){.site-footer{font-size:1rem}}@media screen and (max-width: 42em){.site-footer{font-size:0.9rem}}.site-footer-owner{display:block;font-weight:bold}.site-footer-credits{color:#819198}body{overflow:scroll}a[href^="http"]:after{content:"";display:inline-block;transform:translate(0px, 2px);width:.9em;height:.9em;margin-left:3px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23777'%3E%3Cpath d='M20 3h-5a1 1 0 1 0 0 2h3L8 14a1 1 0 1 0 2 2l9-10v3a1 1 0 1 0 2 0V4a1 1 0 0 0-1-1zM5 3L3 5v14l2 2h14l2-2v-6a1 1 0 1 0-2 0v6H5V5h6a1 1 0 1 0 0-2H5z'/%3E%3C/svg%3E");background-size:cover}#container{position:relative;max-width:1024px;margin:0 auto}#main-content,#sidebar{padding:20px 0}#sidebar{position:fixed;background:white;top:0;bottom:0;width:0;overflow-y:auto;border-right:1px solid #ccc;z-index:1}#sidebar .github-repo{display:inline-block;padding-left:3.75em;font-size:.85em}#sidebar-toggle-link{font-size:24px;position:fixed;background-color:white;opacity:0.75;box-shadow:1px 1px 5px #aaa;left:0;padding:5px 10px;display:none;z-index:100;text-decoration:none !important;color:#aaa}#main-content{position:relative;padding:20px;padding-left:20px}.nav-link.active{text-decoration:underline}a>span{text-decoration:inherit}.table-of-contents-section{border-bottom:1px solid #ccc}.logo{display:block}.table-of-contents-section.active{background-color:#edffcb}.table-of-contents-section{padding:10px 20px}#table-of-contents ul{padding:0;margin:0}#table-of-contents li{display:block;padding:5px 20px}@media (max-width: 900px){#sidebar{left:0;transition:left 0.25s}#sidebar-toggle-link{display:block;transition:left 0.25s}#main-content{left:0;padding-left:20px;transition:left 0.25s}body.sidebar-hidden #sidebar{left:0}body.sidebar-hidden #main-content{left:0}body.sidebar-hidden #sidebar-toggle-link{left:0}}#playground-container .CodeMirror{height:auto;max-height:350px;border:1px solid #aaa}#playground-container .CodeMirror-scroll{height:auto;max-height:350px}#playground-container h4,#playground-container select,#playground-container .field,#playground-container label{display:inline-block;margin-right:20px}#playground-container #logging-checkbox{height:15px}#playground-container .CodeMirror div.CodeMirror-cursor{border-left:3px solid red}#output-container{padding:0 10px;margin:0}#output-container-scroll{padding:0;position:relative;margin-top:0;overflow:auto;max-height:350px;border:1px solid #aaa}a.highlighted{background-color:#ddd;text-decoration:underline}.query-error{text-decoration:underline red dashed} 2 | -------------------------------------------------------------------------------- /docs/assets/tree-sitter-vue-0.2.1/tree-sitter-vue.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikatyang/tree-sitter-vue/91fe2754796cd8fba5f229505a23fa08f3546c06/docs/assets/tree-sitter-vue-0.2.1/tree-sitter-vue.wasm -------------------------------------------------------------------------------- /docs/assets/web-tree-sitter-0.19.3/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Max Brunsfeld 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/assets/web-tree-sitter-0.19.3/tree-sitter.js: -------------------------------------------------------------------------------- 1 | var Module=void 0!==Module?Module:{};!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():window.TreeSitter=t()}(0,function(){var e,t={};for(e in Module)Module.hasOwnProperty(e)&&(t[e]=Module[e]);var n,r,s=[],o=function(e,t){throw t},_=!1,a=!1;_="object"==typeof window,a="function"==typeof importScripts,n="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!_&&!n&&!a;var u,i,l,d,c,m="";n?(m=a?require("path").dirname(m)+"/":__dirname+"/",u=function(e,t){return d||(d=require("fs")),c||(c=require("path")),e=c.normalize(e),d.readFileSync(e,t?null:"utf8")},l=function(e){var t=u(e,!0);return t.buffer||(t=new Uint8Array(t)),x(t.buffer),t},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),s=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),o=function(e){process.exit(e)},Module.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(u=function(e){return read(e)}),l=function(e){var t;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(x("object"==typeof(t=read(e,"binary"))),t)},"undefined"!=typeof scriptArgs?s=scriptArgs:void 0!==arguments&&(s=arguments),"function"==typeof quit&&(o=function(e){quit(e)}),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(_||a)&&(a?m=self.location.href:"undefined"!=typeof document&&document.currentScript&&(m=document.currentScript.src),m=0!==m.indexOf("blob:")?m.substr(0,m.lastIndexOf("/")+1):"",u=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},a&&(l=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),i=function(e,t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)});Module.print||console.log.bind(console);var f=Module.printErr||console.warn.bind(console);for(e in t)t.hasOwnProperty(e)&&(Module[e]=t[e]);t=null,Module.arguments&&(s=Module.arguments),Module.thisProgram&&Module.thisProgram,Module.quit&&(o=Module.quit);var p=16;var h,g=[];function w(e,t){if(!h){h=new WeakMap;for(var n=0;n>0]=t;break;case"i16":C[e>>1]=t;break;case"i32":R[e>>2]=t;break;case"i64":ie=[t>>>0,(ue=t,+Math.abs(ue)>=1?ue>0?(0|Math.min(+Math.floor(ue/4294967296),4294967295))>>>0:~~+Math.ceil((ue-+(~~ue>>>0))/4294967296)>>>0:0)],R[e>>2]=ie[0],R[e+4>>2]=ie[1];break;case"float":q[e>>2]=t;break;case"double":T[e>>3]=t;break;default:te("invalid type for setValue: "+n)}}function I(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return P[e>>0];case"i16":return C[e>>1];case"i32":case"i64":return R[e>>2];case"float":return q[e>>2];case"double":return T[e>>3];default:te("invalid type for getValue: "+t)}return null}Module.wasmBinary&&(M=Module.wasmBinary),Module.noExitRuntime&&(y=Module.noExitRuntime),"object"!=typeof WebAssembly&&te("no native wasm support detected");var S=!1;function x(e,t){e||te("Assertion failed: "+t)}var N=1;var A,P,k,C,R,q,T,L="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function Z(e,t,n){for(var r=t+n,s=t;e[s]&&!(s>=r);)++s;if(s-t>16&&e.subarray&&L)return L.decode(e.subarray(t,s));for(var o="";t>10,56320|1023&i)}}else o+=String.fromCharCode((31&_)<<6|a)}else o+=String.fromCharCode(_)}return o}function F(e,t){return e?Z(k,e,t):""}function W(e,t,n){return function(e,t,n,r){if(!(r>0))return 0;for(var s=n,o=n+r-1,_=0;_=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&e.charCodeAt(++_)),a<=127){if(n>=o)break;t[n++]=a}else if(a<=2047){if(n+1>=o)break;t[n++]=192|a>>6,t[n++]=128|63&a}else if(a<=65535){if(n+2>=o)break;t[n++]=224|a>>12,t[n++]=128|a>>6&63,t[n++]=128|63&a}else{if(n+3>=o)break;t[n++]=240|a>>18,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}}return t[n]=0,n-s}(e,k,t,n)}function O(e){for(var t=0,n=0;n=55296&&r<=57343&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),r<=127?++t:t+=r<=2047?2:r<=65535?3:4}return t}function $(e){A=e,Module.HEAP8=P=new Int8Array(e),Module.HEAP16=C=new Int16Array(e),Module.HEAP32=R=new Int32Array(e),Module.HEAPU8=k=new Uint8Array(e),Module.HEAPU16=new Uint16Array(e),Module.HEAPU32=new Uint32Array(e),Module.HEAPF32=q=new Float32Array(e),Module.HEAPF64=T=new Float64Array(e)}var U=new WebAssembly.Global({value:"i32",mutable:!0},5250848);Module.___heap_base=5250848;var j=Module.INITIAL_MEMORY||33554432;(b=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:j/65536,maximum:32768}))&&(A=b.buffer),j=A.byteLength,$(A);var D=new WebAssembly.Table({initial:13,element:"anyfunc"}),G=[],B=[],H=[],K=[],z=!1;function V(e){G.unshift(e)}B.push({func:function(){Re()}});var X=0,Q=null,Y=null;function J(e){X++,Module.monitorRunDependencies&&Module.monitorRunDependencies(X)}function ee(e){if(X--,Module.monitorRunDependencies&&Module.monitorRunDependencies(X),0==X&&(null!==Q&&(clearInterval(Q),Q=null),Y)){var t=Y;Y=null,t()}}function te(e){throw Module.onAbort&&Module.onAbort(e),f(e+=""),S=!0,1,e="abort("+e+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(e)}function ne(e,t){return String.prototype.startsWith?e.startsWith(t):0===e.indexOf(t)}Module.preloadedImages={},Module.preloadedAudios={},Module.preloadedWasm={},V(function(){var e=[];Module.dynamicLibraries&&(e=e.concat(Module.dynamicLibraries));if(!e.length)return void ve();if(!l)return J(),void Promise.all(e.map(function(e){return Ee(e,{loadAsync:!0,global:!0,nodelete:!0,allowUndefined:!0})})).then(function(){ee(),ve()});e.forEach(function(e){Ee(e,{global:!0,nodelete:!0,allowUndefined:!0})}),ve()});var re="data:application/octet-stream;base64,";function se(e){return ne(e,re)}var oe="file://";function _e(e){return ne(e,oe)}var ae,ue,ie,le="tree-sitter.wasm";function de(e){try{if(e==le&&M)return new Uint8Array(M);if(l)return l(e);throw"both async and sync fetching of the wasm failed"}catch(e){te(e)}}se(le)||(ae=le,le=Module.locateFile?Module.locateFile(ae,m):m+ae);var ce={},me={get:function(e,t){return ce[t]||(ce[t]=new WebAssembly.Global({value:"i32",mutable:!0})),ce[t]}};function fe(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var n=t.func;"number"==typeof n?void 0===t.arg?D.get(n)():D.get(n)(t.arg):n(void 0===t.arg?null:t.arg)}else t(Module)}}var pe,he={nextHandle:1,loadedLibs:{},loadedLibNames:{}};function ge(e){return-1!=["__cpp_exception","__wasm_apply_data_relocs","__dso_handle","__set_stack_limits"].indexOf(e)}function we(e,t){var n={};for(var r in e){var s=e[r];"object"==typeof s&&(s=s.value),"number"==typeof s&&(s+=t),n[r]=s}return function(e){for(var t in e)if(!ge(t)){var n=!1,r=e[t];0==t.indexOf("orig$")&&(t=t.split("$")[1],n=!0),ce[t]||(ce[t]=new WebAssembly.Global({value:"i32",mutable:!0})),(n||0==ce[t].value)&&("function"==typeof r?ce[t].value=w(r):"number"==typeof r?ce[t].value=r:f("unhandled export type for `"+t+"`: "+typeof r))}}(n),n}function Me(e){return 0==e.indexOf("dynCall_")||-1!=["setTempRet0","getTempRet0","stackAlloc","stackSave","stackRestore"].indexOf(e)?e:"_"+e}function ye(e,t){var n,r;return t&&(n=Module.asm["orig$"+e]),n||(n=Module.asm[e]),!n&&t&&(n=Module["_orig$"+e]),n||(n=Module[Me(e)]),n||0!=e.indexOf("invoke_")||(r=e.split("_")[1],n=function(){var e=Le();try{return dynCall(r,arguments[0],Array.prototype.slice.call(arguments,1))}catch(t){if(Ze(e),t!==t+0&&"longjmp"!==t)throw t;_setThrew(1,0)}}),n}function be(e,t){x(1836278016==new Uint32Array(new Uint8Array(e.subarray(0,24)).buffer)[0],"need to see wasm magic number"),x(0===e[8],"need the dylink section to be first");var n=9;function r(){for(var t=0,r=1;;){var s=e[n++];if(t+=(127&s)*r,r*=128,!(128&s))break}return t}r();x(6===e[n]),x(e[++n]==="d".charCodeAt(0)),x(e[++n]==="y".charCodeAt(0)),x(e[++n]==="l".charCodeAt(0)),x(e[++n]==="i".charCodeAt(0)),x(e[++n]==="n".charCodeAt(0)),x(e[++n]==="k".charCodeAt(0)),n++;for(var s=r(),o=r(),_=r(),a=r(),u=r(),i=[],l=0;l>2]=r,-1;n=pe()}return R[t>>2]=n/1e3|0,R[t+4>>2]=n%1e3*1e3*1e3|0,0}function Ne(e){try{return b.grow(e-A.byteLength+65535>>>16),$(b.buffer),1}catch(e){}}function Ae(e){$e(e)}function Pe(e){E(0|e)}xe.sig="iii",Ae.sig="vi",Pe.sig="vi";var ke,Ce={__indirect_function_table:D,__memory_base:1024,__stack_pointer:U,__table_base:1,abort:Ie,clock_gettime:xe,emscripten_memcpy_big:function(e,t,n){k.copyWithin(e,t,t+n)},emscripten_resize_heap:function(e){e>>>=0;var t=k.length;if(e>2147483648)return!1;for(var n,r,s=1;s<=4;s*=2){var o=t*(1+.2/s);if(o=Math.min(o,e+100663296),Ne(Math.min(2147483648,((n=Math.max(16777216,e,o))%(r=65536)>0&&(n+=r-n%r),n))))return!0}return!1},exit:Ae,memory:b,setTempRet0:Pe,tree_sitter_log_callback:function(e,t){if(rt){const n=F(t);rt(n,0!==e)}},tree_sitter_parse_callback:function(e,t,n,r,s){var o=nt(t,{row:n,column:r});"string"==typeof o?(v(s,o.length,"i32"),function(e,t,n){if(void 0===n&&(n=2147483647),n<2)return 0;for(var r=(n-=2)<2*e.length?n/2:e.length,s=0;s>1]=o,t+=2}C[t>>1]=0}(o,e,10240)):v(s,0,"i32")}},Re=(function(){var e={env:Ce,wasi_snapshot_preview1:Ce,"GOT.mem":new Proxy(Ce,me),"GOT.func":new Proxy(Ce,me)};function t(e,t){var n=e.exports;n=we(n,1024),Module.asm=n,ee()}function n(e){t(e.instance)}function r(t){return function(){if(!M&&(_||a)){if("function"==typeof fetch&&!_e(le))return fetch(le,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+le+"'";return e.arrayBuffer()}).catch(function(){return de(le)});if(i)return new Promise(function(e,t){i(le,function(t){e(new Uint8Array(t))},t)})}return Promise.resolve().then(function(){return de(le)})}().then(function(t){return WebAssembly.instantiate(t,e)}).then(t,function(e){f("failed to asynchronously prepare wasm: "+e),te(e)})}if(J(),Module.instantiateWasm)try{return Module.instantiateWasm(e,t)}catch(e){return f("Module.instantiateWasm callback failed with error: "+e),!1}M||"function"!=typeof WebAssembly.instantiateStreaming||se(le)||_e(le)||"function"!=typeof fetch?r(n):fetch(le,{credentials:"same-origin"}).then(function(t){return WebAssembly.instantiateStreaming(t,e).then(n,function(e){return f("wasm streaming compile failed: "+e),f("falling back to ArrayBuffer instantiation"),r(n)})})}(),Module.___wasm_call_ctors=function(){return(Re=Module.___wasm_call_ctors=Module.asm.__wasm_call_ctors).apply(null,arguments)}),qe=Module._malloc=function(){return(qe=Module._malloc=Module.asm.malloc).apply(null,arguments)},Te=(Module._ts_language_symbol_count=function(){return(Module._ts_language_symbol_count=Module.asm.ts_language_symbol_count).apply(null,arguments)},Module._ts_language_version=function(){return(Module._ts_language_version=Module.asm.ts_language_version).apply(null,arguments)},Module._ts_language_field_count=function(){return(Module._ts_language_field_count=Module.asm.ts_language_field_count).apply(null,arguments)},Module._ts_language_symbol_name=function(){return(Module._ts_language_symbol_name=Module.asm.ts_language_symbol_name).apply(null,arguments)},Module._ts_language_symbol_for_name=function(){return(Module._ts_language_symbol_for_name=Module.asm.ts_language_symbol_for_name).apply(null,arguments)},Module._ts_language_symbol_type=function(){return(Module._ts_language_symbol_type=Module.asm.ts_language_symbol_type).apply(null,arguments)},Module._ts_language_field_name_for_id=function(){return(Module._ts_language_field_name_for_id=Module.asm.ts_language_field_name_for_id).apply(null,arguments)},Module._memcpy=function(){return(Module._memcpy=Module.asm.memcpy).apply(null,arguments)},Module._free=function(){return(Module._free=Module.asm.free).apply(null,arguments)},Module._calloc=function(){return(Module._calloc=Module.asm.calloc).apply(null,arguments)},Module._ts_parser_delete=function(){return(Module._ts_parser_delete=Module.asm.ts_parser_delete).apply(null,arguments)},Module._ts_parser_set_language=function(){return(Module._ts_parser_set_language=Module.asm.ts_parser_set_language).apply(null,arguments)},Module._ts_parser_timeout_micros=function(){return(Module._ts_parser_timeout_micros=Module.asm.ts_parser_timeout_micros).apply(null,arguments)},Module._ts_parser_set_timeout_micros=function(){return(Module._ts_parser_set_timeout_micros=Module.asm.ts_parser_set_timeout_micros).apply(null,arguments)},Module._memcmp=function(){return(Module._memcmp=Module.asm.memcmp).apply(null,arguments)},Module._ts_query_new=function(){return(Module._ts_query_new=Module.asm.ts_query_new).apply(null,arguments)},Module._iswspace=function(){return(Module._iswspace=Module.asm.iswspace).apply(null,arguments)},Module._ts_query_delete=function(){return(Module._ts_query_delete=Module.asm.ts_query_delete).apply(null,arguments)},Module._iswalnum=function(){return(Module._iswalnum=Module.asm.iswalnum).apply(null,arguments)},Module._ts_query_pattern_count=function(){return(Module._ts_query_pattern_count=Module.asm.ts_query_pattern_count).apply(null,arguments)},Module._ts_query_capture_count=function(){return(Module._ts_query_capture_count=Module.asm.ts_query_capture_count).apply(null,arguments)},Module._ts_query_string_count=function(){return(Module._ts_query_string_count=Module.asm.ts_query_string_count).apply(null,arguments)},Module._ts_query_capture_name_for_id=function(){return(Module._ts_query_capture_name_for_id=Module.asm.ts_query_capture_name_for_id).apply(null,arguments)},Module._ts_query_string_value_for_id=function(){return(Module._ts_query_string_value_for_id=Module.asm.ts_query_string_value_for_id).apply(null,arguments)},Module._ts_query_predicates_for_pattern=function(){return(Module._ts_query_predicates_for_pattern=Module.asm.ts_query_predicates_for_pattern).apply(null,arguments)},Module._ts_tree_copy=function(){return(Module._ts_tree_copy=Module.asm.ts_tree_copy).apply(null,arguments)},Module._ts_tree_delete=function(){return(Module._ts_tree_delete=Module.asm.ts_tree_delete).apply(null,arguments)},Module._ts_init=function(){return(Module._ts_init=Module.asm.ts_init).apply(null,arguments)},Module._ts_parser_new_wasm=function(){return(Module._ts_parser_new_wasm=Module.asm.ts_parser_new_wasm).apply(null,arguments)},Module._ts_parser_enable_logger_wasm=function(){return(Module._ts_parser_enable_logger_wasm=Module.asm.ts_parser_enable_logger_wasm).apply(null,arguments)},Module._ts_parser_parse_wasm=function(){return(Module._ts_parser_parse_wasm=Module.asm.ts_parser_parse_wasm).apply(null,arguments)},Module._ts_language_type_is_named_wasm=function(){return(Module._ts_language_type_is_named_wasm=Module.asm.ts_language_type_is_named_wasm).apply(null,arguments)},Module._ts_language_type_is_visible_wasm=function(){return(Module._ts_language_type_is_visible_wasm=Module.asm.ts_language_type_is_visible_wasm).apply(null,arguments)},Module._ts_tree_root_node_wasm=function(){return(Module._ts_tree_root_node_wasm=Module.asm.ts_tree_root_node_wasm).apply(null,arguments)},Module._ts_tree_edit_wasm=function(){return(Module._ts_tree_edit_wasm=Module.asm.ts_tree_edit_wasm).apply(null,arguments)},Module._ts_tree_get_changed_ranges_wasm=function(){return(Module._ts_tree_get_changed_ranges_wasm=Module.asm.ts_tree_get_changed_ranges_wasm).apply(null,arguments)},Module._ts_tree_cursor_new_wasm=function(){return(Module._ts_tree_cursor_new_wasm=Module.asm.ts_tree_cursor_new_wasm).apply(null,arguments)},Module._ts_tree_cursor_delete_wasm=function(){return(Module._ts_tree_cursor_delete_wasm=Module.asm.ts_tree_cursor_delete_wasm).apply(null,arguments)},Module._ts_tree_cursor_reset_wasm=function(){return(Module._ts_tree_cursor_reset_wasm=Module.asm.ts_tree_cursor_reset_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_first_child_wasm=function(){return(Module._ts_tree_cursor_goto_first_child_wasm=Module.asm.ts_tree_cursor_goto_first_child_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_next_sibling_wasm=function(){return(Module._ts_tree_cursor_goto_next_sibling_wasm=Module.asm.ts_tree_cursor_goto_next_sibling_wasm).apply(null,arguments)},Module._ts_tree_cursor_goto_parent_wasm=function(){return(Module._ts_tree_cursor_goto_parent_wasm=Module.asm.ts_tree_cursor_goto_parent_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_type_id_wasm=function(){return(Module._ts_tree_cursor_current_node_type_id_wasm=Module.asm.ts_tree_cursor_current_node_type_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_is_named_wasm=function(){return(Module._ts_tree_cursor_current_node_is_named_wasm=Module.asm.ts_tree_cursor_current_node_is_named_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_is_missing_wasm=function(){return(Module._ts_tree_cursor_current_node_is_missing_wasm=Module.asm.ts_tree_cursor_current_node_is_missing_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_id_wasm=function(){return(Module._ts_tree_cursor_current_node_id_wasm=Module.asm.ts_tree_cursor_current_node_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_start_position_wasm=function(){return(Module._ts_tree_cursor_start_position_wasm=Module.asm.ts_tree_cursor_start_position_wasm).apply(null,arguments)},Module._ts_tree_cursor_end_position_wasm=function(){return(Module._ts_tree_cursor_end_position_wasm=Module.asm.ts_tree_cursor_end_position_wasm).apply(null,arguments)},Module._ts_tree_cursor_start_index_wasm=function(){return(Module._ts_tree_cursor_start_index_wasm=Module.asm.ts_tree_cursor_start_index_wasm).apply(null,arguments)},Module._ts_tree_cursor_end_index_wasm=function(){return(Module._ts_tree_cursor_end_index_wasm=Module.asm.ts_tree_cursor_end_index_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_field_id_wasm=function(){return(Module._ts_tree_cursor_current_field_id_wasm=Module.asm.ts_tree_cursor_current_field_id_wasm).apply(null,arguments)},Module._ts_tree_cursor_current_node_wasm=function(){return(Module._ts_tree_cursor_current_node_wasm=Module.asm.ts_tree_cursor_current_node_wasm).apply(null,arguments)},Module._ts_node_symbol_wasm=function(){return(Module._ts_node_symbol_wasm=Module.asm.ts_node_symbol_wasm).apply(null,arguments)},Module._ts_node_child_count_wasm=function(){return(Module._ts_node_child_count_wasm=Module.asm.ts_node_child_count_wasm).apply(null,arguments)},Module._ts_node_named_child_count_wasm=function(){return(Module._ts_node_named_child_count_wasm=Module.asm.ts_node_named_child_count_wasm).apply(null,arguments)},Module._ts_node_child_wasm=function(){return(Module._ts_node_child_wasm=Module.asm.ts_node_child_wasm).apply(null,arguments)},Module._ts_node_named_child_wasm=function(){return(Module._ts_node_named_child_wasm=Module.asm.ts_node_named_child_wasm).apply(null,arguments)},Module._ts_node_child_by_field_id_wasm=function(){return(Module._ts_node_child_by_field_id_wasm=Module.asm.ts_node_child_by_field_id_wasm).apply(null,arguments)},Module._ts_node_next_sibling_wasm=function(){return(Module._ts_node_next_sibling_wasm=Module.asm.ts_node_next_sibling_wasm).apply(null,arguments)},Module._ts_node_prev_sibling_wasm=function(){return(Module._ts_node_prev_sibling_wasm=Module.asm.ts_node_prev_sibling_wasm).apply(null,arguments)},Module._ts_node_next_named_sibling_wasm=function(){return(Module._ts_node_next_named_sibling_wasm=Module.asm.ts_node_next_named_sibling_wasm).apply(null,arguments)},Module._ts_node_prev_named_sibling_wasm=function(){return(Module._ts_node_prev_named_sibling_wasm=Module.asm.ts_node_prev_named_sibling_wasm).apply(null,arguments)},Module._ts_node_parent_wasm=function(){return(Module._ts_node_parent_wasm=Module.asm.ts_node_parent_wasm).apply(null,arguments)},Module._ts_node_descendant_for_index_wasm=function(){return(Module._ts_node_descendant_for_index_wasm=Module.asm.ts_node_descendant_for_index_wasm).apply(null,arguments)},Module._ts_node_named_descendant_for_index_wasm=function(){return(Module._ts_node_named_descendant_for_index_wasm=Module.asm.ts_node_named_descendant_for_index_wasm).apply(null,arguments)},Module._ts_node_descendant_for_position_wasm=function(){return(Module._ts_node_descendant_for_position_wasm=Module.asm.ts_node_descendant_for_position_wasm).apply(null,arguments)},Module._ts_node_named_descendant_for_position_wasm=function(){return(Module._ts_node_named_descendant_for_position_wasm=Module.asm.ts_node_named_descendant_for_position_wasm).apply(null,arguments)},Module._ts_node_start_point_wasm=function(){return(Module._ts_node_start_point_wasm=Module.asm.ts_node_start_point_wasm).apply(null,arguments)},Module._ts_node_end_point_wasm=function(){return(Module._ts_node_end_point_wasm=Module.asm.ts_node_end_point_wasm).apply(null,arguments)},Module._ts_node_start_index_wasm=function(){return(Module._ts_node_start_index_wasm=Module.asm.ts_node_start_index_wasm).apply(null,arguments)},Module._ts_node_end_index_wasm=function(){return(Module._ts_node_end_index_wasm=Module.asm.ts_node_end_index_wasm).apply(null,arguments)},Module._ts_node_to_string_wasm=function(){return(Module._ts_node_to_string_wasm=Module.asm.ts_node_to_string_wasm).apply(null,arguments)},Module._ts_node_children_wasm=function(){return(Module._ts_node_children_wasm=Module.asm.ts_node_children_wasm).apply(null,arguments)},Module._ts_node_named_children_wasm=function(){return(Module._ts_node_named_children_wasm=Module.asm.ts_node_named_children_wasm).apply(null,arguments)},Module._ts_node_descendants_of_type_wasm=function(){return(Module._ts_node_descendants_of_type_wasm=Module.asm.ts_node_descendants_of_type_wasm).apply(null,arguments)},Module._ts_node_is_named_wasm=function(){return(Module._ts_node_is_named_wasm=Module.asm.ts_node_is_named_wasm).apply(null,arguments)},Module._ts_node_has_changes_wasm=function(){return(Module._ts_node_has_changes_wasm=Module.asm.ts_node_has_changes_wasm).apply(null,arguments)},Module._ts_node_has_error_wasm=function(){return(Module._ts_node_has_error_wasm=Module.asm.ts_node_has_error_wasm).apply(null,arguments)},Module._ts_node_is_missing_wasm=function(){return(Module._ts_node_is_missing_wasm=Module.asm.ts_node_is_missing_wasm).apply(null,arguments)},Module._ts_query_matches_wasm=function(){return(Module._ts_query_matches_wasm=Module.asm.ts_query_matches_wasm).apply(null,arguments)},Module._ts_query_captures_wasm=function(){return(Module._ts_query_captures_wasm=Module.asm.ts_query_captures_wasm).apply(null,arguments)},Module._towupper=function(){return(Module._towupper=Module.asm.towupper).apply(null,arguments)},Module._iswdigit=function(){return(Module._iswdigit=Module.asm.iswdigit).apply(null,arguments)},Module._iswalpha=function(){return(Module._iswalpha=Module.asm.iswalpha).apply(null,arguments)},Module._iswlower=function(){return(Module._iswlower=Module.asm.iswlower).apply(null,arguments)},Module._memchr=function(){return(Module._memchr=Module.asm.memchr).apply(null,arguments)},Module.___errno_location=function(){return(Te=Module.___errno_location=Module.asm.__errno_location).apply(null,arguments)}),Le=(Module._strlen=function(){return(Module._strlen=Module.asm.strlen).apply(null,arguments)},Module.stackSave=function(){return(Le=Module.stackSave=Module.asm.stackSave).apply(null,arguments)}),Ze=Module.stackRestore=function(){return(Ze=Module.stackRestore=Module.asm.stackRestore).apply(null,arguments)},Fe=Module.stackAlloc=function(){return(Fe=Module.stackAlloc=Module.asm.stackAlloc).apply(null,arguments)};Module.__Znwm=function(){return(Module.__Znwm=Module.asm._Znwm).apply(null,arguments)},Module.__ZdlPv=function(){return(Module.__ZdlPv=Module.asm._ZdlPv).apply(null,arguments)},Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv=function(){return(Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv=Module.asm._ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc).apply(null,arguments)},Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=function(){return(Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.asm._ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm).apply(null,arguments)},Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=function(){return(Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev).apply(null,arguments)},Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=function(){return(Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw).apply(null,arguments)},Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_=function(){return(Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_).apply(null,arguments)},Module._orig$ts_parser_timeout_micros=function(){return(Module._orig$ts_parser_timeout_micros=Module.asm.orig$ts_parser_timeout_micros).apply(null,arguments)},Module._orig$ts_parser_set_timeout_micros=function(){return(Module._orig$ts_parser_set_timeout_micros=Module.asm.orig$ts_parser_set_timeout_micros).apply(null,arguments)},Module._TRANSFER_BUFFER=2480,Module.___cxa_new_handler=7124;function We(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}Module.allocate=function(e,t){var n;return n=t==N?Fe(e.length):qe(e.length),e.subarray||e.slice?k.set(e,n):k.set(new Uint8Array(e),n),n};function Oe(e){function t(){ke||(ke=!0,Module.calledRun=!0,S||(z=!0,fe(B),fe(H),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Ue&&function(e){var t=Module._main;if(t)try{$e(t(0,0),!0)}catch(e){if(e instanceof We)return;if("unwind"==e)return void(y=!0);var n=e;e&&"object"==typeof e&&e.stack&&(n=[e,e.stack]),f("exception thrown: "+n),o(1,e)}finally{!0}}(),function(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)e=Module.postRun.shift(),K.unshift(e);var e;fe(K)}()))}e=e||s,X>0||(!function(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)V(Module.preRun.shift());fe(G)}(),X>0||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),t()},1)):t()))}function $e(e,t){t&&y&&0===e||(y||(e,!0,Module.onExit&&Module.onExit(e),S=!0),o(e,new We(e)))}if(Y=function e(){ke||Oe(),ke||(Y=e)},Module.run=Oe,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var Ue=!0;Module.noInitialRun&&(Ue=!1),y=!0,Oe();const je=Module,De={},Ge=4,Be=5*Ge,He=2*Ge,Ke=2*Ge+2*He,ze={row:0,column:0},Ve=/[\w-.]*/g,Xe=1,Qe=2,Ye=/^_?tree_sitter_\w+/;var Je,et,tt,nt,rt,st=new Promise(e=>{Module.onRuntimeInitialized=e}).then(()=>{tt=je._ts_init(),Je=I(tt,"i32"),et=I(tt+Ge,"i32")});class Parser{static init(){return st}constructor(){if(null==tt)throw new Error("You must first call Parser.init() and wait for it to resolve.");je._ts_parser_new_wasm(),this[0]=I(tt,"i32"),this[1]=I(tt+Ge,"i32")}delete(){je._ts_parser_delete(this[0]),je._free(this[1]),this[0]=0,this[1]=0}setLanguage(e){let t;if(e){if(e.constructor!==Language)throw new Error("Argument must be a Language");{t=e[0];const n=je._ts_language_version(t);if(ne.slice(t,r));else{if("function"!=typeof e)throw new Error("Argument must be a string or a function");nt=e}this.logCallback?(rt=this.logCallback,je._ts_parser_enable_logger_wasm(this[0],1)):(rt=null,je._ts_parser_enable_logger_wasm(this[0],0));let r=0,s=0;if(n&&n.includedRanges){r=n.includedRanges.length;let e=s=je._calloc(r,Ke);for(let t=0;t0){let e=n;for(let n=0;n0){let n=t;for(let t=0;t0){let n=t;for(let t=0;t0){let e=a;for(let t=0;t<_;t++)u[t]=lt(this.tree,e),e+=Be}return je._free(a),je._free(o),u}get nextSibling(){return it(this),je._ts_node_next_sibling_wasm(this.tree[0]),lt(this.tree)}get previousSibling(){return it(this),je._ts_node_prev_sibling_wasm(this.tree[0]),lt(this.tree)}get nextNamedSibling(){return it(this),je._ts_node_next_named_sibling_wasm(this.tree[0]),lt(this.tree)}get previousNamedSibling(){return it(this),je._ts_node_prev_named_sibling_wasm(this.tree[0]),lt(this.tree)}get parent(){return it(this),je._ts_node_parent_wasm(this.tree[0]),lt(this.tree)}descendantForIndex(e,t=e){if("number"!=typeof e||"number"!=typeof t)throw new Error("Arguments must be numbers");it(this);let n=tt+Be;return v(n,e,"i32"),v(n+Ge,t,"i32"),je._ts_node_descendant_for_index_wasm(this.tree[0]),lt(this.tree)}namedDescendantForIndex(e,t=e){if("number"!=typeof e||"number"!=typeof t)throw new Error("Arguments must be numbers");it(this);let n=tt+Be;return v(n,e,"i32"),v(n+Ge,t,"i32"),je._ts_node_named_descendant_for_index_wasm(this.tree[0]),lt(this.tree)}descendantForPosition(e,t=e){if(!ut(e)||!ut(t))throw new Error("Arguments must be {row, column} objects");it(this);let n=tt+Be;return mt(n,e),mt(n+He,t),je._ts_node_descendant_for_position_wasm(this.tree[0]),lt(this.tree)}namedDescendantForPosition(e,t=e){if(!ut(e)||!ut(t))throw new Error("Arguments must be {row, column} objects");it(this);let n=tt+Be;return mt(n,e),mt(n+He,t),je._ts_node_named_descendant_for_position_wasm(this.tree[0]),lt(this.tree)}walk(){return it(this),je._ts_tree_cursor_new_wasm(this.tree[0]),new TreeCursor(De,this.tree)}toString(){it(this);const e=je._ts_node_to_string_wasm(this.tree[0]),t=function(e){for(var t="";;){var n=k[e++>>0];if(!n)return t;t+=String.fromCharCode(n)}}(e);return je._free(e),t}}class TreeCursor{constructor(e,t){at(e),this.tree=t,ct(this)}delete(){dt(this),je._ts_tree_cursor_delete_wasm(this.tree[0]),this[0]=this[1]=this[2]=0}reset(e){it(e),dt(this,tt+Be),je._ts_tree_cursor_reset_wasm(this.tree[0]),ct(this)}get nodeType(){return this.tree.language.types[this.nodeTypeId]||"ERROR"}get nodeTypeId(){return dt(this),je._ts_tree_cursor_current_node_type_id_wasm(this.tree[0])}get nodeId(){return dt(this),je._ts_tree_cursor_current_node_id_wasm(this.tree[0])}get nodeIsNamed(){return dt(this),1===je._ts_tree_cursor_current_node_is_named_wasm(this.tree[0])}get nodeIsMissing(){return dt(this),1===je._ts_tree_cursor_current_node_is_missing_wasm(this.tree[0])}get nodeText(){dt(this);const e=je._ts_tree_cursor_start_index_wasm(this.tree[0]),t=je._ts_tree_cursor_end_index_wasm(this.tree[0]);return ot(this.tree,e,t)}get startPosition(){return dt(this),je._ts_tree_cursor_start_position_wasm(this.tree[0]),ft(tt)}get endPosition(){return dt(this),je._ts_tree_cursor_end_position_wasm(this.tree[0]),ft(tt)}get startIndex(){return dt(this),je._ts_tree_cursor_start_index_wasm(this.tree[0])}get endIndex(){return dt(this),je._ts_tree_cursor_end_index_wasm(this.tree[0])}currentNode(){return dt(this),je._ts_tree_cursor_current_node_wasm(this.tree[0]),lt(this.tree)}currentFieldId(){return dt(this),je._ts_tree_cursor_current_field_id_wasm(this.tree[0])}currentFieldName(){return this.tree.language.fields[this.currentFieldId()]}gotoFirstChild(){dt(this);const e=je._ts_tree_cursor_goto_first_child_wasm(this.tree[0]);return ct(this),1===e}gotoNextSibling(){dt(this);const e=je._ts_tree_cursor_goto_next_sibling_wasm(this.tree[0]);return ct(this),1===e}gotoParent(){dt(this);const e=je._ts_tree_cursor_goto_parent_wasm(this.tree[0]);return ct(this),1===e}}class Language{constructor(e,t){at(e),this[0]=t,this.types=new Array(je._ts_language_symbol_count(this[0]));for(let e=0,t=this.types.length;e0){if("string"!==s[0].type)throw new Error("Predicates must begin with a literal value");const t=s[0].value;let n=!0;switch(t){case"not-eq?":n=!1;case"eq?":if(3!==s.length)throw new Error(`Wrong number of arguments to \`#eq?\` predicate. Expected 2, got ${s.length-1}`);if("capture"!==s[1].type)throw new Error(`First argument of \`#eq?\` predicate must be a capture. Got "${s[1].value}"`);if("capture"===s[2].type){const t=s[1].name,r=s[2].name;m[e].push(function(e){let s,o;for(const n of e)n.name===t&&(s=n.node),n.name===r&&(o=n.node);return s.text===o.text===n})}else{const t=s[1].name,r=s[2].value;m[e].push(function(e){for(const s of e)if(s.name===t)return s.node.text===r===n;return!1})}break;case"not-match?":n=!1;case"match?":if(3!==s.length)throw new Error(`Wrong number of arguments to \`#match?\` predicate. Expected 2, got ${s.length-1}.`);if("capture"!==s[1].type)throw new Error(`First argument of \`#match?\` predicate must be a capture. Got "${s[1].value}".`);if("string"!==s[2].type)throw new Error(`Second argument of \`#match?\` predicate must be a string. Got @${s[2].value}.`);const r=s[1].name,o=new RegExp(s[2].value);m[e].push(function(e){for(const t of e)if(t.name===r)return o.test(t.node.text)===n;return!1});break;case"set!":if(s.length<2||s.length>3)throw new Error(`Wrong number of arguments to \`#set!\` predicate. Expected 1 or 2. Got ${s.length-1}.`);if(s.some(e=>"string"!==e.type))throw new Error('Arguments to `#set!` predicate must be a strings.".');i[e]||(i[e]={}),i[e][s[1].value]=s[2]?s[2].value:null;break;case"is?":case"is-not?":if(s.length<2||s.length>3)throw new Error(`Wrong number of arguments to \`#${t}\` predicate. Expected 1 or 2. Got ${s.length-1}.`);if(s.some(e=>"string"!==e.type))throw new Error(`Arguments to \`#${t}\` predicate must be a strings.".`);const _="is?"===t?l:d;_[e]||(_[e]={}),_[e][s[1].value]=s[2]?s[2].value:null;break;default:c[e].push({operator:t,operands:s.slice(1)})}s.length=0}}Object.freeze(i[e]),Object.freeze(l[e]),Object.freeze(d[e])}return je._free(n),new Query(De,r,a,m,c,Object.freeze(i),Object.freeze(l),Object.freeze(d))}static load(e){let t;if(e instanceof Uint8Array)t=Promise.resolve(e);else{const n=e;if("undefined"!=typeof process&&process.versions&&process.versions.node){const e=require("fs");t=Promise.resolve(e.readFileSync(n))}else t=fetch(n).then(e=>e.arrayBuffer().then(t=>{if(e.ok)return new Uint8Array(t);{const n=new TextDecoder("utf-8").decode(t);throw new Error(`Language.load failed with status ${e.status}.\n\n${n}`)}}))}const n="function"==typeof loadSideModule?loadSideModule:be;return t.then(e=>n(e,{loadAsync:!0})).then(e=>{const t=Object.keys(e),n=t.find(e=>Ye.test(e)&&!e.includes("external_scanner_"));n||console.log(`Couldn't find language function in WASM file. Symbols:\n${JSON.stringify(t,null,2)}`);const r=e[n]();return new Language(De,r)})}}class Query{constructor(e,t,n,r,s,o,_,a){at(e),this[0]=t,this.captureNames=n,this.textPredicates=r,this.predicates=s,this.setProperties=o,this.assertedProperties=_,this.refutedProperties=a}delete(){je._ts_query_delete(this[0]),this[0]=0}matches(e,t,n){t||(t=ze),n||(n=ze),it(e),je._ts_query_matches_wasm(this[0],e.tree[0],t.row,t.column,n.row,n.column);const r=I(tt,"i32"),s=I(tt+Ge,"i32"),o=new Array(r);let _=0,a=s;for(let t=0;te(s))){o[_++]={pattern:n,captures:s};const e=this.setProperties[n];e&&(o[t].setProperties=e);const r=this.assertedProperties[n];r&&(o[t].assertedProperties=r);const a=this.refutedProperties[n];a&&(o[t].refutedProperties=a)}}return o.length=_,je._free(s),o}captures(e,t,n){t||(t=ze),n||(n=ze),it(e),je._ts_query_captures_wasm(this[0],e.tree[0],t.row,t.column,n.row,n.column);const r=I(tt,"i32"),s=I(tt+Ge,"i32"),o=[],_=[];let a=s;for(let t=0;te(_))){const e=_[r],n=this.setProperties[t];n&&(e.setProperties=n);const s=this.assertedProperties[t];s&&(e.assertedProperties=s);const a=this.refutedProperties[t];a&&(e.refutedProperties=a),o.push(e)}}return je._free(s),o}predicatesForPattern(e){return this.predicates[e]}}function ot(e,t,n){const r=n-t;let s=e.textCallback(t,null,n);for(t+=s.length;t0))break;t+=r.length,s+=r}return t>n&&(s=s.slice(0,r)),s}function _t(e,t,n,r){for(let s=0,o=r.length;s 2 | 3 | 4 | 5 | 6 | 7 | 8 | Tree-sitter Vue Playground 9 | 10 | 11 | 12 |
13 |
14 | 15 | 16 | 26 | 27 |

Tree-sitter Vue v0.2.1

28 | 29 | 57 | 58 |
59 | This playground was modified from the official Tree-sitter Playground. 60 |
61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 110 | 111 |
112 |
113 | 114 | 115 | 116 | 120 | -------------------------------------------------------------------------------- /grammar.js: -------------------------------------------------------------------------------- 1 | module.exports = grammar({ 2 | name: "vue", 3 | 4 | externals: $ => [ 5 | $._text_fragment, 6 | $._interpolation_text, 7 | $._start_tag_name, 8 | $._template_start_tag_name, 9 | $._script_start_tag_name, 10 | $._style_start_tag_name, 11 | $._end_tag_name, 12 | $.erroneous_end_tag_name, 13 | "/>", 14 | $._implicit_end_tag, 15 | $.raw_text, 16 | $.comment, 17 | ], 18 | 19 | extras: $ => [/\s+/], 20 | 21 | rules: { 22 | component: $ => repeat( 23 | choice( 24 | $.comment, 25 | $.element, 26 | $.template_element, 27 | $.script_element, 28 | $.style_element, 29 | ), 30 | ), 31 | 32 | _node: $ => choice( 33 | $.comment, 34 | $.text, 35 | $.interpolation, 36 | $.element, 37 | $.template_element, 38 | $.script_element, 39 | $.style_element, 40 | $.erroneous_end_tag, 41 | ), 42 | 43 | element: $ => choice( 44 | seq( 45 | $.start_tag, 46 | repeat($._node), 47 | choice($.end_tag, $._implicit_end_tag), 48 | ), 49 | $.self_closing_tag, 50 | ), 51 | 52 | template_element: $ => seq( 53 | alias($.template_start_tag, $.start_tag), 54 | repeat($._node), 55 | $.end_tag, 56 | ), 57 | 58 | script_element: $ => seq( 59 | alias($.script_start_tag, $.start_tag), 60 | optional($.raw_text), 61 | $.end_tag, 62 | ), 63 | 64 | style_element: $ => seq( 65 | alias($.style_start_tag, $.start_tag), 66 | optional($.raw_text), 67 | $.end_tag, 68 | ), 69 | 70 | start_tag: $ => seq( 71 | "<", 72 | alias($._start_tag_name, $.tag_name), 73 | repeat(choice($.attribute, $.directive_attribute)), 74 | ">", 75 | ), 76 | 77 | template_start_tag: $ => seq( 78 | "<", 79 | alias($._template_start_tag_name, $.tag_name), 80 | repeat(choice($.attribute, $.directive_attribute)), 81 | ">", 82 | ), 83 | 84 | script_start_tag: $ => seq( 85 | "<", 86 | alias($._script_start_tag_name, $.tag_name), 87 | repeat(choice($.attribute, $.directive_attribute)), 88 | ">", 89 | ), 90 | 91 | style_start_tag: $ => seq( 92 | "<", 93 | alias($._style_start_tag_name, $.tag_name), 94 | repeat(choice($.attribute, $.directive_attribute)), 95 | ">", 96 | ), 97 | 98 | self_closing_tag: $ => seq( 99 | "<", 100 | alias($._start_tag_name, $.tag_name), 101 | repeat(choice($.attribute, $.directive_attribute)), 102 | "/>", 103 | ), 104 | 105 | end_tag: $ => seq( 106 | "", 109 | ), 110 | 111 | erroneous_end_tag: $ => seq( 112 | "", 115 | ), 116 | 117 | attribute: $ => seq( 118 | $.attribute_name, 119 | optional(seq( 120 | "=", 121 | choice( 122 | $.attribute_value, 123 | $.quoted_attribute_value, 124 | ), 125 | )), 126 | ), 127 | 128 | attribute_name: $ => /[^<>"'=/\s]+/, 129 | 130 | attribute_value: $ => /[^<>"'=\s]+/, 131 | 132 | quoted_attribute_value: $ => 133 | choice( 134 | seq("'", optional(alias(/[^']+/, $.attribute_value)), "'"), 135 | seq('"', optional(alias(/[^"]+/, $.attribute_value)), '"'), 136 | ), 137 | 138 | text: $ => choice($._text_fragment, "{{"), 139 | 140 | interpolation: $ => seq( 141 | "{{", 142 | optional(alias($._interpolation_text, $.raw_text)), 143 | "}}", 144 | ), 145 | 146 | directive_attribute: $ => 147 | seq( 148 | choice( 149 | seq( 150 | $.directive_name, 151 | optional(seq( 152 | token.immediate(prec(1, ":")), 153 | choice($.directive_argument, $.directive_dynamic_argument), 154 | )), 155 | ), 156 | seq( 157 | alias($.directive_shorthand, $.directive_name), 158 | choice($.directive_argument, $.directive_dynamic_argument), 159 | ), 160 | ), 161 | optional($.directive_modifiers), 162 | optional(seq("=", choice($.attribute_value, $.quoted_attribute_value))), 163 | ), 164 | directive_name: $ => token(prec(1, /v-[^<>'"=/\s:.]+/)), 165 | directive_shorthand: $ => token(prec(1, choice(":", "@", "#"))), 166 | directive_argument: $ => token.immediate(/[^<>"'/=\s.]+/), 167 | directive_dynamic_argument: $ => seq( 168 | token.immediate(prec(1, "[")), 169 | optional($.directive_dynamic_argument_value), 170 | token.immediate("]"), 171 | ), 172 | directive_dynamic_argument_value: $ => token.immediate(/[^<>"'/=\s\]]+/), 173 | directive_modifiers: $ => repeat1(seq(token.immediate(prec(1, ".")), $.directive_modifier)), 174 | directive_modifier: $ => token.immediate(/[^<>"'/=\s.]+/), 175 | }, 176 | }); 177 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tree-sitter-vue", 3 | "version": "0.2.1", 4 | "description": "Vue grammar for tree-sitter", 5 | "keywords": [ 6 | "parser", 7 | "lexer" 8 | ], 9 | "main": "bindings/node", 10 | "repository": "https://github.com/ikatyang/tree-sitter-vue", 11 | "homepage": "https://github.com/ikatyang/tree-sitter-vue#readme", 12 | "author": { 13 | "name": "Ika", 14 | "email": "ikatyang@gmail.com", 15 | "url": "https://github.com/ikatyang" 16 | }, 17 | "license": "MIT", 18 | "scripts": { 19 | "test": "yarn tree-sitter test", 20 | "prepack": "bash scripts/update-html-scanner.sh && yarn tree-sitter generate", 21 | "release": "standard-version --commit-all", 22 | "tree-sitter": "./tree-sitter/target/release/tree-sitter" 23 | }, 24 | "standard-version": { 25 | "preset": "angular", 26 | "scripts": { 27 | "postbump": "rm -r docs && node scripts/generate-playground.js && git add docs" 28 | } 29 | }, 30 | "dependencies": { 31 | "nan": "^2.14.0" 32 | }, 33 | "devDependencies": { 34 | "standard-version": "7.0.0", 35 | "tree-sitter-html": "0.19.0" 36 | }, 37 | "files": [ 38 | "/src/", 39 | "/bindings/node/", 40 | "/binding.gyp", 41 | "/grammar.js", 42 | "/ThirdPartyNoticeText.txt" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /scripts/generate-playground.js: -------------------------------------------------------------------------------- 1 | const generatePlayground = require("../tree-sitter/script/generate-playground"); 2 | 3 | generatePlayground("docs", { 4 | name: "Vue", 5 | example: ` 6 | 11 | 12 | 23 | 24 | 30 | `.trim() 31 | }); 32 | -------------------------------------------------------------------------------- /scripts/setup-tree-sitter.sh: -------------------------------------------------------------------------------- 1 | git submodule update --init 2 | cd tree-sitter 3 | ./script/build-wasm 4 | cargo build --release 5 | -------------------------------------------------------------------------------- /scripts/update-html-scanner.sh: -------------------------------------------------------------------------------- 1 | cp ./node_modules/tree-sitter-html/src/tag.h ./src/tree_sitter_html 2 | sed -e "s/ START_TAG_NAME,/ TEXT_FRAGMENT, INTERPOLATION_TEXT, START_TAG_NAME, TEMPLATE_START_TAG_NAME,/" \ 3 | -e "s/case SCRIPT:/case TEMPLATE: lexer->result_symbol = TEMPLATE_START_TAG_NAME; break; case SCRIPT:/" \ 4 | -e 's/"<\/script"/"<\/SCRIPT"/' \ 5 | -e 's/"<\/style"/"<\/STYLE"/' \ 6 | -e "s/lexer->lookahead == end_deli/towupper(lexer->lookahead) == end_deli/" \ 7 | ./node_modules/tree-sitter-html/src/scanner.cc > ./src/tree_sitter_html/scanner.cc 8 | -------------------------------------------------------------------------------- /src/grammar.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue", 3 | "rules": { 4 | "component": { 5 | "type": "REPEAT", 6 | "content": { 7 | "type": "CHOICE", 8 | "members": [ 9 | { 10 | "type": "SYMBOL", 11 | "name": "comment" 12 | }, 13 | { 14 | "type": "SYMBOL", 15 | "name": "element" 16 | }, 17 | { 18 | "type": "SYMBOL", 19 | "name": "template_element" 20 | }, 21 | { 22 | "type": "SYMBOL", 23 | "name": "script_element" 24 | }, 25 | { 26 | "type": "SYMBOL", 27 | "name": "style_element" 28 | } 29 | ] 30 | } 31 | }, 32 | "_node": { 33 | "type": "CHOICE", 34 | "members": [ 35 | { 36 | "type": "SYMBOL", 37 | "name": "comment" 38 | }, 39 | { 40 | "type": "SYMBOL", 41 | "name": "text" 42 | }, 43 | { 44 | "type": "SYMBOL", 45 | "name": "interpolation" 46 | }, 47 | { 48 | "type": "SYMBOL", 49 | "name": "element" 50 | }, 51 | { 52 | "type": "SYMBOL", 53 | "name": "template_element" 54 | }, 55 | { 56 | "type": "SYMBOL", 57 | "name": "script_element" 58 | }, 59 | { 60 | "type": "SYMBOL", 61 | "name": "style_element" 62 | }, 63 | { 64 | "type": "SYMBOL", 65 | "name": "erroneous_end_tag" 66 | } 67 | ] 68 | }, 69 | "element": { 70 | "type": "CHOICE", 71 | "members": [ 72 | { 73 | "type": "SEQ", 74 | "members": [ 75 | { 76 | "type": "SYMBOL", 77 | "name": "start_tag" 78 | }, 79 | { 80 | "type": "REPEAT", 81 | "content": { 82 | "type": "SYMBOL", 83 | "name": "_node" 84 | } 85 | }, 86 | { 87 | "type": "CHOICE", 88 | "members": [ 89 | { 90 | "type": "SYMBOL", 91 | "name": "end_tag" 92 | }, 93 | { 94 | "type": "SYMBOL", 95 | "name": "_implicit_end_tag" 96 | } 97 | ] 98 | } 99 | ] 100 | }, 101 | { 102 | "type": "SYMBOL", 103 | "name": "self_closing_tag" 104 | } 105 | ] 106 | }, 107 | "template_element": { 108 | "type": "SEQ", 109 | "members": [ 110 | { 111 | "type": "ALIAS", 112 | "content": { 113 | "type": "SYMBOL", 114 | "name": "template_start_tag" 115 | }, 116 | "named": true, 117 | "value": "start_tag" 118 | }, 119 | { 120 | "type": "REPEAT", 121 | "content": { 122 | "type": "SYMBOL", 123 | "name": "_node" 124 | } 125 | }, 126 | { 127 | "type": "SYMBOL", 128 | "name": "end_tag" 129 | } 130 | ] 131 | }, 132 | "script_element": { 133 | "type": "SEQ", 134 | "members": [ 135 | { 136 | "type": "ALIAS", 137 | "content": { 138 | "type": "SYMBOL", 139 | "name": "script_start_tag" 140 | }, 141 | "named": true, 142 | "value": "start_tag" 143 | }, 144 | { 145 | "type": "CHOICE", 146 | "members": [ 147 | { 148 | "type": "SYMBOL", 149 | "name": "raw_text" 150 | }, 151 | { 152 | "type": "BLANK" 153 | } 154 | ] 155 | }, 156 | { 157 | "type": "SYMBOL", 158 | "name": "end_tag" 159 | } 160 | ] 161 | }, 162 | "style_element": { 163 | "type": "SEQ", 164 | "members": [ 165 | { 166 | "type": "ALIAS", 167 | "content": { 168 | "type": "SYMBOL", 169 | "name": "style_start_tag" 170 | }, 171 | "named": true, 172 | "value": "start_tag" 173 | }, 174 | { 175 | "type": "CHOICE", 176 | "members": [ 177 | { 178 | "type": "SYMBOL", 179 | "name": "raw_text" 180 | }, 181 | { 182 | "type": "BLANK" 183 | } 184 | ] 185 | }, 186 | { 187 | "type": "SYMBOL", 188 | "name": "end_tag" 189 | } 190 | ] 191 | }, 192 | "start_tag": { 193 | "type": "SEQ", 194 | "members": [ 195 | { 196 | "type": "STRING", 197 | "value": "<" 198 | }, 199 | { 200 | "type": "ALIAS", 201 | "content": { 202 | "type": "SYMBOL", 203 | "name": "_start_tag_name" 204 | }, 205 | "named": true, 206 | "value": "tag_name" 207 | }, 208 | { 209 | "type": "REPEAT", 210 | "content": { 211 | "type": "CHOICE", 212 | "members": [ 213 | { 214 | "type": "SYMBOL", 215 | "name": "attribute" 216 | }, 217 | { 218 | "type": "SYMBOL", 219 | "name": "directive_attribute" 220 | } 221 | ] 222 | } 223 | }, 224 | { 225 | "type": "STRING", 226 | "value": ">" 227 | } 228 | ] 229 | }, 230 | "template_start_tag": { 231 | "type": "SEQ", 232 | "members": [ 233 | { 234 | "type": "STRING", 235 | "value": "<" 236 | }, 237 | { 238 | "type": "ALIAS", 239 | "content": { 240 | "type": "SYMBOL", 241 | "name": "_template_start_tag_name" 242 | }, 243 | "named": true, 244 | "value": "tag_name" 245 | }, 246 | { 247 | "type": "REPEAT", 248 | "content": { 249 | "type": "CHOICE", 250 | "members": [ 251 | { 252 | "type": "SYMBOL", 253 | "name": "attribute" 254 | }, 255 | { 256 | "type": "SYMBOL", 257 | "name": "directive_attribute" 258 | } 259 | ] 260 | } 261 | }, 262 | { 263 | "type": "STRING", 264 | "value": ">" 265 | } 266 | ] 267 | }, 268 | "script_start_tag": { 269 | "type": "SEQ", 270 | "members": [ 271 | { 272 | "type": "STRING", 273 | "value": "<" 274 | }, 275 | { 276 | "type": "ALIAS", 277 | "content": { 278 | "type": "SYMBOL", 279 | "name": "_script_start_tag_name" 280 | }, 281 | "named": true, 282 | "value": "tag_name" 283 | }, 284 | { 285 | "type": "REPEAT", 286 | "content": { 287 | "type": "CHOICE", 288 | "members": [ 289 | { 290 | "type": "SYMBOL", 291 | "name": "attribute" 292 | }, 293 | { 294 | "type": "SYMBOL", 295 | "name": "directive_attribute" 296 | } 297 | ] 298 | } 299 | }, 300 | { 301 | "type": "STRING", 302 | "value": ">" 303 | } 304 | ] 305 | }, 306 | "style_start_tag": { 307 | "type": "SEQ", 308 | "members": [ 309 | { 310 | "type": "STRING", 311 | "value": "<" 312 | }, 313 | { 314 | "type": "ALIAS", 315 | "content": { 316 | "type": "SYMBOL", 317 | "name": "_style_start_tag_name" 318 | }, 319 | "named": true, 320 | "value": "tag_name" 321 | }, 322 | { 323 | "type": "REPEAT", 324 | "content": { 325 | "type": "CHOICE", 326 | "members": [ 327 | { 328 | "type": "SYMBOL", 329 | "name": "attribute" 330 | }, 331 | { 332 | "type": "SYMBOL", 333 | "name": "directive_attribute" 334 | } 335 | ] 336 | } 337 | }, 338 | { 339 | "type": "STRING", 340 | "value": ">" 341 | } 342 | ] 343 | }, 344 | "self_closing_tag": { 345 | "type": "SEQ", 346 | "members": [ 347 | { 348 | "type": "STRING", 349 | "value": "<" 350 | }, 351 | { 352 | "type": "ALIAS", 353 | "content": { 354 | "type": "SYMBOL", 355 | "name": "_start_tag_name" 356 | }, 357 | "named": true, 358 | "value": "tag_name" 359 | }, 360 | { 361 | "type": "REPEAT", 362 | "content": { 363 | "type": "CHOICE", 364 | "members": [ 365 | { 366 | "type": "SYMBOL", 367 | "name": "attribute" 368 | }, 369 | { 370 | "type": "SYMBOL", 371 | "name": "directive_attribute" 372 | } 373 | ] 374 | } 375 | }, 376 | { 377 | "type": "STRING", 378 | "value": "/>" 379 | } 380 | ] 381 | }, 382 | "end_tag": { 383 | "type": "SEQ", 384 | "members": [ 385 | { 386 | "type": "STRING", 387 | "value": "" 401 | } 402 | ] 403 | }, 404 | "erroneous_end_tag": { 405 | "type": "SEQ", 406 | "members": [ 407 | { 408 | "type": "STRING", 409 | "value": "" 418 | } 419 | ] 420 | }, 421 | "attribute": { 422 | "type": "SEQ", 423 | "members": [ 424 | { 425 | "type": "SYMBOL", 426 | "name": "attribute_name" 427 | }, 428 | { 429 | "type": "CHOICE", 430 | "members": [ 431 | { 432 | "type": "SEQ", 433 | "members": [ 434 | { 435 | "type": "STRING", 436 | "value": "=" 437 | }, 438 | { 439 | "type": "CHOICE", 440 | "members": [ 441 | { 442 | "type": "SYMBOL", 443 | "name": "attribute_value" 444 | }, 445 | { 446 | "type": "SYMBOL", 447 | "name": "quoted_attribute_value" 448 | } 449 | ] 450 | } 451 | ] 452 | }, 453 | { 454 | "type": "BLANK" 455 | } 456 | ] 457 | } 458 | ] 459 | }, 460 | "attribute_name": { 461 | "type": "PATTERN", 462 | "value": "[^<>\"'=/\\s]+" 463 | }, 464 | "attribute_value": { 465 | "type": "PATTERN", 466 | "value": "[^<>\"'=\\s]+" 467 | }, 468 | "quoted_attribute_value": { 469 | "type": "CHOICE", 470 | "members": [ 471 | { 472 | "type": "SEQ", 473 | "members": [ 474 | { 475 | "type": "STRING", 476 | "value": "'" 477 | }, 478 | { 479 | "type": "CHOICE", 480 | "members": [ 481 | { 482 | "type": "ALIAS", 483 | "content": { 484 | "type": "PATTERN", 485 | "value": "[^']+" 486 | }, 487 | "named": true, 488 | "value": "attribute_value" 489 | }, 490 | { 491 | "type": "BLANK" 492 | } 493 | ] 494 | }, 495 | { 496 | "type": "STRING", 497 | "value": "'" 498 | } 499 | ] 500 | }, 501 | { 502 | "type": "SEQ", 503 | "members": [ 504 | { 505 | "type": "STRING", 506 | "value": "\"" 507 | }, 508 | { 509 | "type": "CHOICE", 510 | "members": [ 511 | { 512 | "type": "ALIAS", 513 | "content": { 514 | "type": "PATTERN", 515 | "value": "[^\"]+" 516 | }, 517 | "named": true, 518 | "value": "attribute_value" 519 | }, 520 | { 521 | "type": "BLANK" 522 | } 523 | ] 524 | }, 525 | { 526 | "type": "STRING", 527 | "value": "\"" 528 | } 529 | ] 530 | } 531 | ] 532 | }, 533 | "text": { 534 | "type": "CHOICE", 535 | "members": [ 536 | { 537 | "type": "SYMBOL", 538 | "name": "_text_fragment" 539 | }, 540 | { 541 | "type": "STRING", 542 | "value": "{{" 543 | } 544 | ] 545 | }, 546 | "interpolation": { 547 | "type": "SEQ", 548 | "members": [ 549 | { 550 | "type": "STRING", 551 | "value": "{{" 552 | }, 553 | { 554 | "type": "CHOICE", 555 | "members": [ 556 | { 557 | "type": "ALIAS", 558 | "content": { 559 | "type": "SYMBOL", 560 | "name": "_interpolation_text" 561 | }, 562 | "named": true, 563 | "value": "raw_text" 564 | }, 565 | { 566 | "type": "BLANK" 567 | } 568 | ] 569 | }, 570 | { 571 | "type": "STRING", 572 | "value": "}}" 573 | } 574 | ] 575 | }, 576 | "directive_attribute": { 577 | "type": "SEQ", 578 | "members": [ 579 | { 580 | "type": "CHOICE", 581 | "members": [ 582 | { 583 | "type": "SEQ", 584 | "members": [ 585 | { 586 | "type": "SYMBOL", 587 | "name": "directive_name" 588 | }, 589 | { 590 | "type": "CHOICE", 591 | "members": [ 592 | { 593 | "type": "SEQ", 594 | "members": [ 595 | { 596 | "type": "IMMEDIATE_TOKEN", 597 | "content": { 598 | "type": "PREC", 599 | "value": 1, 600 | "content": { 601 | "type": "STRING", 602 | "value": ":" 603 | } 604 | } 605 | }, 606 | { 607 | "type": "CHOICE", 608 | "members": [ 609 | { 610 | "type": "SYMBOL", 611 | "name": "directive_argument" 612 | }, 613 | { 614 | "type": "SYMBOL", 615 | "name": "directive_dynamic_argument" 616 | } 617 | ] 618 | } 619 | ] 620 | }, 621 | { 622 | "type": "BLANK" 623 | } 624 | ] 625 | } 626 | ] 627 | }, 628 | { 629 | "type": "SEQ", 630 | "members": [ 631 | { 632 | "type": "ALIAS", 633 | "content": { 634 | "type": "SYMBOL", 635 | "name": "directive_shorthand" 636 | }, 637 | "named": true, 638 | "value": "directive_name" 639 | }, 640 | { 641 | "type": "CHOICE", 642 | "members": [ 643 | { 644 | "type": "SYMBOL", 645 | "name": "directive_argument" 646 | }, 647 | { 648 | "type": "SYMBOL", 649 | "name": "directive_dynamic_argument" 650 | } 651 | ] 652 | } 653 | ] 654 | } 655 | ] 656 | }, 657 | { 658 | "type": "CHOICE", 659 | "members": [ 660 | { 661 | "type": "SYMBOL", 662 | "name": "directive_modifiers" 663 | }, 664 | { 665 | "type": "BLANK" 666 | } 667 | ] 668 | }, 669 | { 670 | "type": "CHOICE", 671 | "members": [ 672 | { 673 | "type": "SEQ", 674 | "members": [ 675 | { 676 | "type": "STRING", 677 | "value": "=" 678 | }, 679 | { 680 | "type": "CHOICE", 681 | "members": [ 682 | { 683 | "type": "SYMBOL", 684 | "name": "attribute_value" 685 | }, 686 | { 687 | "type": "SYMBOL", 688 | "name": "quoted_attribute_value" 689 | } 690 | ] 691 | } 692 | ] 693 | }, 694 | { 695 | "type": "BLANK" 696 | } 697 | ] 698 | } 699 | ] 700 | }, 701 | "directive_name": { 702 | "type": "TOKEN", 703 | "content": { 704 | "type": "PREC", 705 | "value": 1, 706 | "content": { 707 | "type": "PATTERN", 708 | "value": "v-[^<>'\"=/\\s:.]+" 709 | } 710 | } 711 | }, 712 | "directive_shorthand": { 713 | "type": "TOKEN", 714 | "content": { 715 | "type": "PREC", 716 | "value": 1, 717 | "content": { 718 | "type": "CHOICE", 719 | "members": [ 720 | { 721 | "type": "STRING", 722 | "value": ":" 723 | }, 724 | { 725 | "type": "STRING", 726 | "value": "@" 727 | }, 728 | { 729 | "type": "STRING", 730 | "value": "#" 731 | } 732 | ] 733 | } 734 | } 735 | }, 736 | "directive_argument": { 737 | "type": "IMMEDIATE_TOKEN", 738 | "content": { 739 | "type": "PATTERN", 740 | "value": "[^<>\"'/=\\s.]+" 741 | } 742 | }, 743 | "directive_dynamic_argument": { 744 | "type": "SEQ", 745 | "members": [ 746 | { 747 | "type": "IMMEDIATE_TOKEN", 748 | "content": { 749 | "type": "PREC", 750 | "value": 1, 751 | "content": { 752 | "type": "STRING", 753 | "value": "[" 754 | } 755 | } 756 | }, 757 | { 758 | "type": "CHOICE", 759 | "members": [ 760 | { 761 | "type": "SYMBOL", 762 | "name": "directive_dynamic_argument_value" 763 | }, 764 | { 765 | "type": "BLANK" 766 | } 767 | ] 768 | }, 769 | { 770 | "type": "IMMEDIATE_TOKEN", 771 | "content": { 772 | "type": "STRING", 773 | "value": "]" 774 | } 775 | } 776 | ] 777 | }, 778 | "directive_dynamic_argument_value": { 779 | "type": "IMMEDIATE_TOKEN", 780 | "content": { 781 | "type": "PATTERN", 782 | "value": "[^<>\"'/=\\s\\]]+" 783 | } 784 | }, 785 | "directive_modifiers": { 786 | "type": "REPEAT1", 787 | "content": { 788 | "type": "SEQ", 789 | "members": [ 790 | { 791 | "type": "IMMEDIATE_TOKEN", 792 | "content": { 793 | "type": "PREC", 794 | "value": 1, 795 | "content": { 796 | "type": "STRING", 797 | "value": "." 798 | } 799 | } 800 | }, 801 | { 802 | "type": "SYMBOL", 803 | "name": "directive_modifier" 804 | } 805 | ] 806 | } 807 | }, 808 | "directive_modifier": { 809 | "type": "IMMEDIATE_TOKEN", 810 | "content": { 811 | "type": "PATTERN", 812 | "value": "[^<>\"'/=\\s.]+" 813 | } 814 | } 815 | }, 816 | "extras": [ 817 | { 818 | "type": "PATTERN", 819 | "value": "\\s+" 820 | } 821 | ], 822 | "conflicts": [], 823 | "precedences": [], 824 | "externals": [ 825 | { 826 | "type": "SYMBOL", 827 | "name": "_text_fragment" 828 | }, 829 | { 830 | "type": "SYMBOL", 831 | "name": "_interpolation_text" 832 | }, 833 | { 834 | "type": "SYMBOL", 835 | "name": "_start_tag_name" 836 | }, 837 | { 838 | "type": "SYMBOL", 839 | "name": "_template_start_tag_name" 840 | }, 841 | { 842 | "type": "SYMBOL", 843 | "name": "_script_start_tag_name" 844 | }, 845 | { 846 | "type": "SYMBOL", 847 | "name": "_style_start_tag_name" 848 | }, 849 | { 850 | "type": "SYMBOL", 851 | "name": "_end_tag_name" 852 | }, 853 | { 854 | "type": "SYMBOL", 855 | "name": "erroneous_end_tag_name" 856 | }, 857 | { 858 | "type": "STRING", 859 | "value": "/>" 860 | }, 861 | { 862 | "type": "SYMBOL", 863 | "name": "_implicit_end_tag" 864 | }, 865 | { 866 | "type": "SYMBOL", 867 | "name": "raw_text" 868 | }, 869 | { 870 | "type": "SYMBOL", 871 | "name": "comment" 872 | } 873 | ], 874 | "inline": [], 875 | "supertypes": [] 876 | } 877 | 878 | -------------------------------------------------------------------------------- /src/node-types.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "type": "attribute", 4 | "named": true, 5 | "fields": {}, 6 | "children": { 7 | "multiple": true, 8 | "required": true, 9 | "types": [ 10 | { 11 | "type": "attribute_name", 12 | "named": true 13 | }, 14 | { 15 | "type": "attribute_value", 16 | "named": true 17 | }, 18 | { 19 | "type": "quoted_attribute_value", 20 | "named": true 21 | } 22 | ] 23 | } 24 | }, 25 | { 26 | "type": "component", 27 | "named": true, 28 | "fields": {}, 29 | "children": { 30 | "multiple": true, 31 | "required": false, 32 | "types": [ 33 | { 34 | "type": "comment", 35 | "named": true 36 | }, 37 | { 38 | "type": "element", 39 | "named": true 40 | }, 41 | { 42 | "type": "script_element", 43 | "named": true 44 | }, 45 | { 46 | "type": "style_element", 47 | "named": true 48 | }, 49 | { 50 | "type": "template_element", 51 | "named": true 52 | } 53 | ] 54 | } 55 | }, 56 | { 57 | "type": "directive_argument", 58 | "named": true, 59 | "fields": {} 60 | }, 61 | { 62 | "type": "directive_attribute", 63 | "named": true, 64 | "fields": {}, 65 | "children": { 66 | "multiple": true, 67 | "required": true, 68 | "types": [ 69 | { 70 | "type": "attribute_value", 71 | "named": true 72 | }, 73 | { 74 | "type": "directive_argument", 75 | "named": true 76 | }, 77 | { 78 | "type": "directive_dynamic_argument", 79 | "named": true 80 | }, 81 | { 82 | "type": "directive_modifiers", 83 | "named": true 84 | }, 85 | { 86 | "type": "directive_name", 87 | "named": true 88 | }, 89 | { 90 | "type": "quoted_attribute_value", 91 | "named": true 92 | } 93 | ] 94 | } 95 | }, 96 | { 97 | "type": "directive_dynamic_argument", 98 | "named": true, 99 | "fields": {}, 100 | "children": { 101 | "multiple": false, 102 | "required": false, 103 | "types": [ 104 | { 105 | "type": "directive_dynamic_argument_value", 106 | "named": true 107 | } 108 | ] 109 | } 110 | }, 111 | { 112 | "type": "directive_modifier", 113 | "named": true, 114 | "fields": {} 115 | }, 116 | { 117 | "type": "directive_modifiers", 118 | "named": true, 119 | "fields": {}, 120 | "children": { 121 | "multiple": true, 122 | "required": true, 123 | "types": [ 124 | { 125 | "type": "directive_modifier", 126 | "named": true 127 | } 128 | ] 129 | } 130 | }, 131 | { 132 | "type": "element", 133 | "named": true, 134 | "fields": {}, 135 | "children": { 136 | "multiple": true, 137 | "required": true, 138 | "types": [ 139 | { 140 | "type": "comment", 141 | "named": true 142 | }, 143 | { 144 | "type": "element", 145 | "named": true 146 | }, 147 | { 148 | "type": "end_tag", 149 | "named": true 150 | }, 151 | { 152 | "type": "erroneous_end_tag", 153 | "named": true 154 | }, 155 | { 156 | "type": "interpolation", 157 | "named": true 158 | }, 159 | { 160 | "type": "script_element", 161 | "named": true 162 | }, 163 | { 164 | "type": "self_closing_tag", 165 | "named": true 166 | }, 167 | { 168 | "type": "start_tag", 169 | "named": true 170 | }, 171 | { 172 | "type": "style_element", 173 | "named": true 174 | }, 175 | { 176 | "type": "template_element", 177 | "named": true 178 | }, 179 | { 180 | "type": "text", 181 | "named": true 182 | } 183 | ] 184 | } 185 | }, 186 | { 187 | "type": "end_tag", 188 | "named": true, 189 | "fields": {}, 190 | "children": { 191 | "multiple": false, 192 | "required": true, 193 | "types": [ 194 | { 195 | "type": "tag_name", 196 | "named": true 197 | } 198 | ] 199 | } 200 | }, 201 | { 202 | "type": "erroneous_end_tag", 203 | "named": true, 204 | "fields": {}, 205 | "children": { 206 | "multiple": false, 207 | "required": true, 208 | "types": [ 209 | { 210 | "type": "erroneous_end_tag_name", 211 | "named": true 212 | } 213 | ] 214 | } 215 | }, 216 | { 217 | "type": "interpolation", 218 | "named": true, 219 | "fields": {}, 220 | "children": { 221 | "multiple": false, 222 | "required": false, 223 | "types": [ 224 | { 225 | "type": "raw_text", 226 | "named": true 227 | } 228 | ] 229 | } 230 | }, 231 | { 232 | "type": "quoted_attribute_value", 233 | "named": true, 234 | "fields": {}, 235 | "children": { 236 | "multiple": false, 237 | "required": false, 238 | "types": [ 239 | { 240 | "type": "attribute_value", 241 | "named": true 242 | } 243 | ] 244 | } 245 | }, 246 | { 247 | "type": "script_element", 248 | "named": true, 249 | "fields": {}, 250 | "children": { 251 | "multiple": true, 252 | "required": true, 253 | "types": [ 254 | { 255 | "type": "end_tag", 256 | "named": true 257 | }, 258 | { 259 | "type": "raw_text", 260 | "named": true 261 | }, 262 | { 263 | "type": "start_tag", 264 | "named": true 265 | } 266 | ] 267 | } 268 | }, 269 | { 270 | "type": "self_closing_tag", 271 | "named": true, 272 | "fields": {}, 273 | "children": { 274 | "multiple": true, 275 | "required": true, 276 | "types": [ 277 | { 278 | "type": "attribute", 279 | "named": true 280 | }, 281 | { 282 | "type": "directive_attribute", 283 | "named": true 284 | }, 285 | { 286 | "type": "tag_name", 287 | "named": true 288 | } 289 | ] 290 | } 291 | }, 292 | { 293 | "type": "start_tag", 294 | "named": true, 295 | "fields": {}, 296 | "children": { 297 | "multiple": true, 298 | "required": true, 299 | "types": [ 300 | { 301 | "type": "attribute", 302 | "named": true 303 | }, 304 | { 305 | "type": "directive_attribute", 306 | "named": true 307 | }, 308 | { 309 | "type": "tag_name", 310 | "named": true 311 | } 312 | ] 313 | } 314 | }, 315 | { 316 | "type": "style_element", 317 | "named": true, 318 | "fields": {}, 319 | "children": { 320 | "multiple": true, 321 | "required": true, 322 | "types": [ 323 | { 324 | "type": "end_tag", 325 | "named": true 326 | }, 327 | { 328 | "type": "raw_text", 329 | "named": true 330 | }, 331 | { 332 | "type": "start_tag", 333 | "named": true 334 | } 335 | ] 336 | } 337 | }, 338 | { 339 | "type": "template_element", 340 | "named": true, 341 | "fields": {}, 342 | "children": { 343 | "multiple": true, 344 | "required": true, 345 | "types": [ 346 | { 347 | "type": "comment", 348 | "named": true 349 | }, 350 | { 351 | "type": "element", 352 | "named": true 353 | }, 354 | { 355 | "type": "end_tag", 356 | "named": true 357 | }, 358 | { 359 | "type": "erroneous_end_tag", 360 | "named": true 361 | }, 362 | { 363 | "type": "interpolation", 364 | "named": true 365 | }, 366 | { 367 | "type": "script_element", 368 | "named": true 369 | }, 370 | { 371 | "type": "start_tag", 372 | "named": true 373 | }, 374 | { 375 | "type": "style_element", 376 | "named": true 377 | }, 378 | { 379 | "type": "template_element", 380 | "named": true 381 | }, 382 | { 383 | "type": "text", 384 | "named": true 385 | } 386 | ] 387 | } 388 | }, 389 | { 390 | "type": "text", 391 | "named": true, 392 | "fields": {} 393 | }, 394 | { 395 | "type": "\"", 396 | "named": false 397 | }, 398 | { 399 | "type": "'", 400 | "named": false 401 | }, 402 | { 403 | "type": ".", 404 | "named": false 405 | }, 406 | { 407 | "type": "/>", 408 | "named": false 409 | }, 410 | { 411 | "type": ":", 412 | "named": false 413 | }, 414 | { 415 | "type": "<", 416 | "named": false 417 | }, 418 | { 419 | "type": "", 428 | "named": false 429 | }, 430 | { 431 | "type": "[", 432 | "named": false 433 | }, 434 | { 435 | "type": "]", 436 | "named": false 437 | }, 438 | { 439 | "type": "attribute_name", 440 | "named": true 441 | }, 442 | { 443 | "type": "attribute_value", 444 | "named": true 445 | }, 446 | { 447 | "type": "comment", 448 | "named": true 449 | }, 450 | { 451 | "type": "directive_dynamic_argument_value", 452 | "named": true 453 | }, 454 | { 455 | "type": "directive_name", 456 | "named": true 457 | }, 458 | { 459 | "type": "erroneous_end_tag_name", 460 | "named": true 461 | }, 462 | { 463 | "type": "raw_text", 464 | "named": true 465 | }, 466 | { 467 | "type": "tag_name", 468 | "named": true 469 | }, 470 | { 471 | "type": "{{", 472 | "named": false 473 | }, 474 | { 475 | "type": "}}", 476 | "named": false 477 | } 478 | ] -------------------------------------------------------------------------------- /src/scanner.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "./tree_sitter_html/scanner.cc" 4 | 5 | extern "C" { 6 | 7 | void *tree_sitter_vue_external_scanner_create() { 8 | return new Scanner(); 9 | } 10 | 11 | void tree_sitter_vue_external_scanner_destroy(void *payload) { 12 | Scanner *scanner = static_cast(payload); 13 | delete scanner; 14 | } 15 | 16 | unsigned tree_sitter_vue_external_scanner_serialize(void *payload, char *buffer) { 17 | Scanner *scanner = static_cast(payload); 18 | return scanner->serialize(buffer); 19 | } 20 | 21 | void tree_sitter_vue_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) { 22 | Scanner *scanner = static_cast(payload); 23 | scanner->deserialize(buffer, length); 24 | } 25 | 26 | bool tree_sitter_vue_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols) { 27 | bool is_error_recovery = valid_symbols[START_TAG_NAME] && valid_symbols[RAW_TEXT]; 28 | if (!is_error_recovery) { 29 | if (lexer->lookahead != '<' && (valid_symbols[TEXT_FRAGMENT] || valid_symbols[INTERPOLATION_TEXT])) { 30 | bool has_text = false; 31 | for (;; has_text = true) { 32 | if (lexer->lookahead == 0) { 33 | lexer->mark_end(lexer); 34 | break; 35 | } else if (lexer->lookahead == '<') { 36 | lexer->mark_end(lexer); 37 | lexer->advance(lexer, false); 38 | if (iswalpha(lexer->lookahead) || lexer->lookahead == '!' || lexer->lookahead == '?' || lexer->lookahead == '/') break; 39 | } else if (lexer->lookahead == '{') { 40 | lexer->mark_end(lexer); 41 | lexer->advance(lexer, false); 42 | if (lexer->lookahead == '{') break; 43 | } else if (lexer->lookahead == '}' && valid_symbols[INTERPOLATION_TEXT]) { 44 | lexer->mark_end(lexer); 45 | lexer->advance(lexer, false); 46 | if (lexer->lookahead == '}') { 47 | lexer->result_symbol = INTERPOLATION_TEXT; 48 | return has_text; 49 | } 50 | } else { 51 | lexer->advance(lexer, false); 52 | } 53 | } 54 | if (has_text) { 55 | lexer->result_symbol = TEXT_FRAGMENT; 56 | return true; 57 | } 58 | } 59 | } 60 | Scanner *scanner = static_cast(payload); 61 | return scanner->scan(lexer, valid_symbols); 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/tree_sitter/parser.h: -------------------------------------------------------------------------------- 1 | #ifndef TREE_SITTER_PARSER_H_ 2 | #define TREE_SITTER_PARSER_H_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | #define ts_builtin_sym_error ((TSSymbol)-1) 13 | #define ts_builtin_sym_end 0 14 | #define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 15 | 16 | typedef uint16_t TSStateId; 17 | 18 | #ifndef TREE_SITTER_API_H_ 19 | typedef uint16_t TSSymbol; 20 | typedef uint16_t TSFieldId; 21 | typedef struct TSLanguage TSLanguage; 22 | #endif 23 | 24 | typedef struct { 25 | TSFieldId field_id; 26 | uint8_t child_index; 27 | bool inherited; 28 | } TSFieldMapEntry; 29 | 30 | typedef struct { 31 | uint16_t index; 32 | uint16_t length; 33 | } TSFieldMapSlice; 34 | 35 | typedef struct { 36 | bool visible; 37 | bool named; 38 | bool supertype; 39 | } TSSymbolMetadata; 40 | 41 | typedef struct TSLexer TSLexer; 42 | 43 | struct TSLexer { 44 | int32_t lookahead; 45 | TSSymbol result_symbol; 46 | void (*advance)(TSLexer *, bool); 47 | void (*mark_end)(TSLexer *); 48 | uint32_t (*get_column)(TSLexer *); 49 | bool (*is_at_included_range_start)(const TSLexer *); 50 | bool (*eof)(const TSLexer *); 51 | }; 52 | 53 | typedef enum { 54 | TSParseActionTypeShift, 55 | TSParseActionTypeReduce, 56 | TSParseActionTypeAccept, 57 | TSParseActionTypeRecover, 58 | } TSParseActionType; 59 | 60 | typedef union { 61 | struct { 62 | uint8_t type; 63 | TSStateId state; 64 | bool extra; 65 | bool repetition; 66 | } shift; 67 | struct { 68 | uint8_t type; 69 | uint8_t child_count; 70 | TSSymbol symbol; 71 | int16_t dynamic_precedence; 72 | uint16_t production_id; 73 | } reduce; 74 | uint8_t type; 75 | } TSParseAction; 76 | 77 | typedef struct { 78 | uint16_t lex_state; 79 | uint16_t external_lex_state; 80 | } TSLexMode; 81 | 82 | typedef union { 83 | TSParseAction action; 84 | struct { 85 | uint8_t count; 86 | bool reusable; 87 | } entry; 88 | } TSParseActionEntry; 89 | 90 | struct TSLanguage { 91 | uint32_t version; 92 | uint32_t symbol_count; 93 | uint32_t alias_count; 94 | uint32_t token_count; 95 | uint32_t external_token_count; 96 | uint32_t state_count; 97 | uint32_t large_state_count; 98 | uint32_t production_id_count; 99 | uint32_t field_count; 100 | uint16_t max_alias_sequence_length; 101 | const uint16_t *parse_table; 102 | const uint16_t *small_parse_table; 103 | const uint32_t *small_parse_table_map; 104 | const TSParseActionEntry *parse_actions; 105 | const char **symbol_names; 106 | const char **field_names; 107 | const TSFieldMapSlice *field_map_slices; 108 | const TSFieldMapEntry *field_map_entries; 109 | const TSSymbolMetadata *symbol_metadata; 110 | const TSSymbol *public_symbol_map; 111 | const uint16_t *alias_map; 112 | const TSSymbol *alias_sequences; 113 | const TSLexMode *lex_modes; 114 | bool (*lex_fn)(TSLexer *, TSStateId); 115 | bool (*keyword_lex_fn)(TSLexer *, TSStateId); 116 | TSSymbol keyword_capture_token; 117 | struct { 118 | const bool *states; 119 | const TSSymbol *symbol_map; 120 | void *(*create)(void); 121 | void (*destroy)(void *); 122 | bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); 123 | unsigned (*serialize)(void *, char *); 124 | void (*deserialize)(void *, const char *, unsigned); 125 | } external_scanner; 126 | }; 127 | 128 | /* 129 | * Lexer Macros 130 | */ 131 | 132 | #define START_LEXER() \ 133 | bool result = false; \ 134 | bool skip = false; \ 135 | bool eof = false; \ 136 | int32_t lookahead; \ 137 | goto start; \ 138 | next_state: \ 139 | lexer->advance(lexer, skip); \ 140 | start: \ 141 | skip = false; \ 142 | lookahead = lexer->lookahead; 143 | 144 | #define ADVANCE(state_value) \ 145 | { \ 146 | state = state_value; \ 147 | goto next_state; \ 148 | } 149 | 150 | #define SKIP(state_value) \ 151 | { \ 152 | skip = true; \ 153 | state = state_value; \ 154 | goto next_state; \ 155 | } 156 | 157 | #define ACCEPT_TOKEN(symbol_value) \ 158 | result = true; \ 159 | lexer->result_symbol = symbol_value; \ 160 | lexer->mark_end(lexer); 161 | 162 | #define END_STATE() return result; 163 | 164 | /* 165 | * Parse Table Macros 166 | */ 167 | 168 | #define SMALL_STATE(id) id - LARGE_STATE_COUNT 169 | 170 | #define STATE(id) id 171 | 172 | #define ACTIONS(id) id 173 | 174 | #define SHIFT(state_value) \ 175 | {{ \ 176 | .shift = { \ 177 | .type = TSParseActionTypeShift, \ 178 | .state = state_value \ 179 | } \ 180 | }} 181 | 182 | #define SHIFT_REPEAT(state_value) \ 183 | {{ \ 184 | .shift = { \ 185 | .type = TSParseActionTypeShift, \ 186 | .state = state_value, \ 187 | .repetition = true \ 188 | } \ 189 | }} 190 | 191 | #define SHIFT_EXTRA() \ 192 | {{ \ 193 | .shift = { \ 194 | .type = TSParseActionTypeShift, \ 195 | .extra = true \ 196 | } \ 197 | }} 198 | 199 | #define REDUCE(symbol_val, child_count_val, ...) \ 200 | {{ \ 201 | .reduce = { \ 202 | .type = TSParseActionTypeReduce, \ 203 | .symbol = symbol_val, \ 204 | .child_count = child_count_val, \ 205 | __VA_ARGS__ \ 206 | }, \ 207 | }} 208 | 209 | #define RECOVER() \ 210 | {{ \ 211 | .type = TSParseActionTypeRecover \ 212 | }} 213 | 214 | #define ACCEPT_INPUT() \ 215 | {{ \ 216 | .type = TSParseActionTypeAccept \ 217 | }} 218 | 219 | #ifdef __cplusplus 220 | } 221 | #endif 222 | 223 | #endif // TREE_SITTER_PARSER_H_ 224 | -------------------------------------------------------------------------------- /src/tree_sitter_html/scanner.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "tag.h" 8 | 9 | namespace { 10 | 11 | using std::vector; 12 | using std::string; 13 | 14 | enum TokenType { 15 | TEXT_FRAGMENT, INTERPOLATION_TEXT, START_TAG_NAME, TEMPLATE_START_TAG_NAME, 16 | SCRIPT_START_TAG_NAME, 17 | STYLE_START_TAG_NAME, 18 | END_TAG_NAME, 19 | ERRONEOUS_END_TAG_NAME, 20 | SELF_CLOSING_TAG_DELIMITER, 21 | IMPLICIT_END_TAG, 22 | RAW_TEXT, 23 | COMMENT 24 | }; 25 | 26 | struct Scanner { 27 | Scanner() {} 28 | 29 | unsigned serialize(char *buffer) { 30 | uint16_t tag_count = tags.size() > UINT16_MAX ? UINT16_MAX : tags.size(); 31 | uint16_t serialized_tag_count = 0; 32 | 33 | unsigned i = sizeof(tag_count); 34 | std::memcpy(&buffer[i], &tag_count, sizeof(tag_count)); 35 | i += sizeof(tag_count); 36 | 37 | for (; serialized_tag_count < tag_count; serialized_tag_count++) { 38 | Tag &tag = tags[serialized_tag_count]; 39 | if (tag.type == CUSTOM) { 40 | unsigned name_length = tag.custom_tag_name.size(); 41 | if (name_length > UINT8_MAX) name_length = UINT8_MAX; 42 | if (i + 2 + name_length >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE) break; 43 | buffer[i++] = static_cast(tag.type); 44 | buffer[i++] = name_length; 45 | tag.custom_tag_name.copy(&buffer[i], name_length); 46 | i += name_length; 47 | } else { 48 | if (i + 1 >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE) break; 49 | buffer[i++] = static_cast(tag.type); 50 | } 51 | } 52 | 53 | std::memcpy(&buffer[0], &serialized_tag_count, sizeof(serialized_tag_count)); 54 | return i; 55 | } 56 | 57 | void deserialize(const char *buffer, unsigned length) { 58 | tags.clear(); 59 | if (length > 0) { 60 | unsigned i = 0; 61 | uint16_t tag_count, serialized_tag_count; 62 | 63 | std::memcpy(&serialized_tag_count, &buffer[i], sizeof(serialized_tag_count)); 64 | i += sizeof(serialized_tag_count); 65 | 66 | std::memcpy(&tag_count, &buffer[i], sizeof(tag_count)); 67 | i += sizeof(tag_count); 68 | 69 | tags.resize(tag_count); 70 | for (unsigned j = 0; j < serialized_tag_count; j++) { 71 | Tag &tag = tags[j]; 72 | tag.type = static_cast(buffer[i++]); 73 | if (tag.type == CUSTOM) { 74 | uint16_t name_length = static_cast(buffer[i++]); 75 | tag.custom_tag_name.assign(&buffer[i], &buffer[i + name_length]); 76 | i += name_length; 77 | } 78 | } 79 | } 80 | } 81 | 82 | string scan_tag_name(TSLexer *lexer) { 83 | string tag_name; 84 | while (iswalnum(lexer->lookahead) || 85 | lexer->lookahead == '-' || 86 | lexer->lookahead == ':') { 87 | tag_name += towupper(lexer->lookahead); 88 | lexer->advance(lexer, false); 89 | } 90 | return tag_name; 91 | } 92 | 93 | bool scan_comment(TSLexer *lexer) { 94 | if (lexer->lookahead != '-') return false; 95 | lexer->advance(lexer, false); 96 | if (lexer->lookahead != '-') return false; 97 | lexer->advance(lexer, false); 98 | 99 | unsigned dashes = 0; 100 | while (lexer->lookahead) { 101 | switch (lexer->lookahead) { 102 | case '-': 103 | ++dashes; 104 | break; 105 | case '>': 106 | if (dashes >= 2) { 107 | lexer->result_symbol = COMMENT; 108 | lexer->advance(lexer, false); 109 | lexer->mark_end(lexer); 110 | return true; 111 | } 112 | default: 113 | dashes = 0; 114 | } 115 | lexer->advance(lexer, false); 116 | } 117 | return false; 118 | } 119 | 120 | bool scan_raw_text(TSLexer *lexer) { 121 | if (!tags.size()) return false; 122 | 123 | lexer->mark_end(lexer); 124 | 125 | const string &end_delimiter = tags.back().type == SCRIPT 126 | ? "lookahead) { 131 | if (towupper(lexer->lookahead) == end_delimiter[delimiter_index]) { 132 | delimiter_index++; 133 | if (delimiter_index == end_delimiter.size()) break; 134 | lexer->advance(lexer, false); 135 | } else { 136 | delimiter_index = 0; 137 | lexer->advance(lexer, false); 138 | lexer->mark_end(lexer); 139 | } 140 | } 141 | 142 | lexer->result_symbol = RAW_TEXT; 143 | return true; 144 | } 145 | 146 | bool scan_implicit_end_tag(TSLexer *lexer) { 147 | Tag *parent = tags.empty() ? NULL : &tags.back(); 148 | 149 | bool is_closing_tag = false; 150 | if (lexer->lookahead == '/') { 151 | is_closing_tag = true; 152 | lexer->advance(lexer, false); 153 | } else { 154 | if (parent && parent->is_void()) { 155 | tags.pop_back(); 156 | lexer->result_symbol = IMPLICIT_END_TAG; 157 | return true; 158 | } 159 | } 160 | 161 | string tag_name = scan_tag_name(lexer); 162 | if (tag_name.empty()) return false; 163 | 164 | Tag next_tag = Tag::for_name(tag_name); 165 | 166 | if (is_closing_tag) { 167 | // The tag correctly closes the topmost element on the stack 168 | if (!tags.empty() && tags.back() == next_tag) return false; 169 | 170 | // Otherwise, dig deeper and queue implicit end tags (to be nice in 171 | // the case of malformed HTML) 172 | if (std::find(tags.begin(), tags.end(), next_tag) != tags.end()) { 173 | tags.pop_back(); 174 | lexer->result_symbol = IMPLICIT_END_TAG; 175 | return true; 176 | } 177 | } else if (parent && !parent->can_contain(next_tag)) { 178 | tags.pop_back(); 179 | lexer->result_symbol = IMPLICIT_END_TAG; 180 | return true; 181 | } 182 | 183 | return false; 184 | } 185 | 186 | bool scan_start_tag_name(TSLexer *lexer) { 187 | string tag_name = scan_tag_name(lexer); 188 | if (tag_name.empty()) return false; 189 | Tag tag = Tag::for_name(tag_name); 190 | tags.push_back(tag); 191 | switch (tag.type) { 192 | case TEMPLATE: lexer->result_symbol = TEMPLATE_START_TAG_NAME; break; case SCRIPT: 193 | lexer->result_symbol = SCRIPT_START_TAG_NAME; 194 | break; 195 | case STYLE: 196 | lexer->result_symbol = STYLE_START_TAG_NAME; 197 | break; 198 | default: 199 | lexer->result_symbol = START_TAG_NAME; 200 | break; 201 | } 202 | return true; 203 | } 204 | 205 | bool scan_end_tag_name(TSLexer *lexer) { 206 | string tag_name = scan_tag_name(lexer); 207 | if (tag_name.empty()) return false; 208 | Tag tag = Tag::for_name(tag_name); 209 | if (!tags.empty() && tags.back() == tag) { 210 | tags.pop_back(); 211 | lexer->result_symbol = END_TAG_NAME; 212 | } else { 213 | lexer->result_symbol = ERRONEOUS_END_TAG_NAME; 214 | } 215 | return true; 216 | } 217 | 218 | bool scan_self_closing_tag_delimiter(TSLexer *lexer) { 219 | lexer->advance(lexer, false); 220 | if (lexer->lookahead == '>') { 221 | lexer->advance(lexer, false); 222 | if (!tags.empty()) { 223 | tags.pop_back(); 224 | lexer->result_symbol = SELF_CLOSING_TAG_DELIMITER; 225 | } 226 | return true; 227 | } 228 | return false; 229 | } 230 | 231 | bool scan(TSLexer *lexer, const bool *valid_symbols) { 232 | while (iswspace(lexer->lookahead)) { 233 | lexer->advance(lexer, true); 234 | } 235 | 236 | if (valid_symbols[RAW_TEXT] && !valid_symbols[START_TAG_NAME] && !valid_symbols[END_TAG_NAME]) { 237 | return scan_raw_text(lexer); 238 | } 239 | 240 | switch (lexer->lookahead) { 241 | case '<': 242 | lexer->mark_end(lexer); 243 | lexer->advance(lexer, false); 244 | 245 | if (lexer->lookahead == '!') { 246 | lexer->advance(lexer, false); 247 | return scan_comment(lexer); 248 | } 249 | 250 | if (valid_symbols[IMPLICIT_END_TAG]) { 251 | return scan_implicit_end_tag(lexer); 252 | } 253 | break; 254 | 255 | case '\0': 256 | if (valid_symbols[IMPLICIT_END_TAG]) { 257 | return scan_implicit_end_tag(lexer); 258 | } 259 | break; 260 | 261 | case '/': 262 | if (valid_symbols[SELF_CLOSING_TAG_DELIMITER]) { 263 | return scan_self_closing_tag_delimiter(lexer); 264 | } 265 | break; 266 | 267 | default: 268 | if ((valid_symbols[START_TAG_NAME] || valid_symbols[END_TAG_NAME]) && !valid_symbols[RAW_TEXT]) { 269 | return valid_symbols[START_TAG_NAME] 270 | ? scan_start_tag_name(lexer) 271 | : scan_end_tag_name(lexer); 272 | } 273 | } 274 | 275 | return false; 276 | } 277 | 278 | vector tags; 279 | }; 280 | 281 | } 282 | 283 | extern "C" { 284 | 285 | void *tree_sitter_html_external_scanner_create() { 286 | return new Scanner(); 287 | } 288 | 289 | bool tree_sitter_html_external_scanner_scan(void *payload, TSLexer *lexer, 290 | const bool *valid_symbols) { 291 | Scanner *scanner = static_cast(payload); 292 | return scanner->scan(lexer, valid_symbols); 293 | } 294 | 295 | unsigned tree_sitter_html_external_scanner_serialize(void *payload, char *buffer) { 296 | Scanner *scanner = static_cast(payload); 297 | return scanner->serialize(buffer); 298 | } 299 | 300 | void tree_sitter_html_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) { 301 | Scanner *scanner = static_cast(payload); 302 | scanner->deserialize(buffer, length); 303 | } 304 | 305 | void tree_sitter_html_external_scanner_destroy(void *payload) { 306 | Scanner *scanner = static_cast(payload); 307 | delete scanner; 308 | } 309 | 310 | } 311 | -------------------------------------------------------------------------------- /src/tree_sitter_html/tag.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using std::string; 5 | using std::map; 6 | 7 | enum TagType { 8 | AREA, 9 | BASE, 10 | BASEFONT, 11 | BGSOUND, 12 | BR, 13 | COL, 14 | COMMAND, 15 | EMBED, 16 | FRAME, 17 | HR, 18 | IMAGE, 19 | IMG, 20 | INPUT, 21 | ISINDEX, 22 | KEYGEN, 23 | LINK, 24 | MENUITEM, 25 | META, 26 | NEXTID, 27 | PARAM, 28 | SOURCE, 29 | TRACK, 30 | WBR, 31 | END_OF_VOID_TAGS, 32 | 33 | A, 34 | ABBR, 35 | ADDRESS, 36 | ARTICLE, 37 | ASIDE, 38 | AUDIO, 39 | B, 40 | BDI, 41 | BDO, 42 | BLOCKQUOTE, 43 | BODY, 44 | BUTTON, 45 | CANVAS, 46 | CAPTION, 47 | CITE, 48 | CODE, 49 | COLGROUP, 50 | DATA, 51 | DATALIST, 52 | DD, 53 | DEL, 54 | DETAILS, 55 | DFN, 56 | DIALOG, 57 | DIV, 58 | DL, 59 | DT, 60 | EM, 61 | FIELDSET, 62 | FIGCAPTION, 63 | FIGURE, 64 | FOOTER, 65 | FORM, 66 | H1, 67 | H2, 68 | H3, 69 | H4, 70 | H5, 71 | H6, 72 | HEAD, 73 | HEADER, 74 | HGROUP, 75 | HTML, 76 | I, 77 | IFRAME, 78 | INS, 79 | KBD, 80 | LABEL, 81 | LEGEND, 82 | LI, 83 | MAIN, 84 | MAP, 85 | MARK, 86 | MATH, 87 | MENU, 88 | METER, 89 | NAV, 90 | NOSCRIPT, 91 | OBJECT, 92 | OL, 93 | OPTGROUP, 94 | OPTION, 95 | OUTPUT, 96 | P, 97 | PICTURE, 98 | PRE, 99 | PROGRESS, 100 | Q, 101 | RB, 102 | RP, 103 | RT, 104 | RTC, 105 | RUBY, 106 | S, 107 | SAMP, 108 | SCRIPT, 109 | SECTION, 110 | SELECT, 111 | SLOT, 112 | SMALL, 113 | SPAN, 114 | STRONG, 115 | STYLE, 116 | SUB, 117 | SUMMARY, 118 | SUP, 119 | SVG, 120 | TABLE, 121 | TBODY, 122 | TD, 123 | TEMPLATE, 124 | TEXTAREA, 125 | TFOOT, 126 | TH, 127 | THEAD, 128 | TIME, 129 | TITLE, 130 | TR, 131 | U, 132 | UL, 133 | VAR, 134 | VIDEO, 135 | 136 | CUSTOM, 137 | }; 138 | 139 | 140 | static const map get_tag_map() { 141 | map result; 142 | #define TAG(name) result[#name] = name 143 | TAG(AREA); 144 | TAG(BASE); 145 | TAG(BASEFONT); 146 | TAG(BGSOUND); 147 | TAG(BR); 148 | TAG(COL); 149 | TAG(COMMAND); 150 | TAG(EMBED); 151 | TAG(FRAME); 152 | TAG(HR); 153 | TAG(IMAGE); 154 | TAG(IMG); 155 | TAG(INPUT); 156 | TAG(ISINDEX); 157 | TAG(KEYGEN); 158 | TAG(LINK); 159 | TAG(MENUITEM); 160 | TAG(META); 161 | TAG(NEXTID); 162 | TAG(PARAM); 163 | TAG(SOURCE); 164 | TAG(TRACK); 165 | TAG(WBR); 166 | TAG(A); 167 | TAG(ABBR); 168 | TAG(ADDRESS); 169 | TAG(ARTICLE); 170 | TAG(ASIDE); 171 | TAG(AUDIO); 172 | TAG(B); 173 | TAG(BDI); 174 | TAG(BDO); 175 | TAG(BLOCKQUOTE); 176 | TAG(BODY); 177 | TAG(BUTTON); 178 | TAG(CANVAS); 179 | TAG(CAPTION); 180 | TAG(CITE); 181 | TAG(CODE); 182 | TAG(COLGROUP); 183 | TAG(DATA); 184 | TAG(DATALIST); 185 | TAG(DD); 186 | TAG(DEL); 187 | TAG(DETAILS); 188 | TAG(DFN); 189 | TAG(DIALOG); 190 | TAG(DIV); 191 | TAG(DL); 192 | TAG(DT); 193 | TAG(EM); 194 | TAG(FIELDSET); 195 | TAG(FIGCAPTION); 196 | TAG(FIGURE); 197 | TAG(FOOTER); 198 | TAG(FORM); 199 | TAG(H1); 200 | TAG(H2); 201 | TAG(H3); 202 | TAG(H4); 203 | TAG(H5); 204 | TAG(H6); 205 | TAG(HEAD); 206 | TAG(HEADER); 207 | TAG(HGROUP); 208 | TAG(HTML); 209 | TAG(I); 210 | TAG(IFRAME); 211 | TAG(INS); 212 | TAG(KBD); 213 | TAG(LABEL); 214 | TAG(LEGEND); 215 | TAG(LI); 216 | TAG(MAIN); 217 | TAG(MAP); 218 | TAG(MARK); 219 | TAG(MATH); 220 | TAG(MENU); 221 | TAG(METER); 222 | TAG(NAV); 223 | TAG(NOSCRIPT); 224 | TAG(OBJECT); 225 | TAG(OL); 226 | TAG(OPTGROUP); 227 | TAG(OPTION); 228 | TAG(OUTPUT); 229 | TAG(P); 230 | TAG(PICTURE); 231 | TAG(PRE); 232 | TAG(PROGRESS); 233 | TAG(Q); 234 | TAG(RB); 235 | TAG(RP); 236 | TAG(RT); 237 | TAG(RTC); 238 | TAG(RUBY); 239 | TAG(S); 240 | TAG(SAMP); 241 | TAG(SCRIPT); 242 | TAG(SECTION); 243 | TAG(SELECT); 244 | TAG(SLOT); 245 | TAG(SMALL); 246 | TAG(SPAN); 247 | TAG(STRONG); 248 | TAG(STYLE); 249 | TAG(SUB); 250 | TAG(SUMMARY); 251 | TAG(SUP); 252 | TAG(SVG); 253 | TAG(TABLE); 254 | TAG(TBODY); 255 | TAG(TD); 256 | TAG(TEMPLATE); 257 | TAG(TEXTAREA); 258 | TAG(TFOOT); 259 | TAG(TH); 260 | TAG(THEAD); 261 | TAG(TIME); 262 | TAG(TITLE); 263 | TAG(TR); 264 | TAG(U); 265 | TAG(UL); 266 | TAG(VAR); 267 | TAG(VIDEO); 268 | #undef TAG 269 | return result; 270 | } 271 | 272 | static const map TAG_TYPES_BY_TAG_NAME = get_tag_map(); 273 | 274 | static const TagType TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS[] = { 275 | ADDRESS, 276 | ARTICLE, 277 | ASIDE, 278 | BLOCKQUOTE, 279 | DETAILS, 280 | DIV, 281 | DL, 282 | FIELDSET, 283 | FIGCAPTION, 284 | FIGURE, 285 | FOOTER, 286 | FORM, 287 | H1, 288 | H2, 289 | H3, 290 | H4, 291 | H5, 292 | H6, 293 | HEADER, 294 | HR, 295 | MAIN, 296 | NAV, 297 | OL, 298 | P, 299 | PRE, 300 | SECTION, 301 | }; 302 | 303 | static const TagType *TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS_END = ( 304 | TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS + 305 | sizeof(TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS) / 306 | sizeof(TagType) 307 | ); 308 | 309 | struct Tag { 310 | TagType type; 311 | string custom_tag_name; 312 | 313 | // This default constructor is used in the case where there is not enough space 314 | // in the serialization buffer to store all of the tags. In that case, tags 315 | // that cannot be serialized will be treated as having an unknown type. These 316 | // tags will be closed via implicit end tags regardless of the next closing 317 | // tag is encountered. 318 | Tag() : type(END_OF_VOID_TAGS) {} 319 | 320 | Tag(TagType type, const string &name) : type(type), custom_tag_name(name) {} 321 | 322 | bool operator==(const Tag &other) const { 323 | if (type != other.type) return false; 324 | if (type == CUSTOM && custom_tag_name != other.custom_tag_name) return false; 325 | return true; 326 | } 327 | 328 | inline bool is_void() const { 329 | return type < END_OF_VOID_TAGS; 330 | } 331 | 332 | inline bool can_contain(const Tag &tag) { 333 | TagType child = tag.type; 334 | 335 | switch (type) { 336 | case LI: return child != LI; 337 | 338 | case DT: 339 | case DD: 340 | return child != DT && child != DD; 341 | 342 | case P: 343 | return std::find( 344 | TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS, 345 | TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS_END, 346 | tag.type 347 | ) == TAG_TYPES_NOT_ALLOWED_IN_PARAGRAPHS_END; 348 | 349 | case COLGROUP: 350 | return child == COL; 351 | 352 | case RB: 353 | case RT: 354 | case RP: 355 | return child != RB && child != RT && child != RP; 356 | 357 | case OPTGROUP: 358 | return child != OPTGROUP; 359 | 360 | case TR: 361 | return child != TR; 362 | 363 | case TD: 364 | case TH: 365 | return child != TD && child != TH && child != TR; 366 | 367 | default: 368 | return true; 369 | } 370 | } 371 | 372 | static inline Tag for_name(const string &name) { 373 | map::const_iterator type = TAG_TYPES_BY_TAG_NAME.find(name); 374 | if (type != TAG_TYPES_BY_TAG_NAME.end()) { 375 | return Tag(type->second, string()); 376 | } else { 377 | return Tag(CUSTOM, name); 378 | } 379 | } 380 | }; 381 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | JSONStream@^1.0.4: 6 | version "1.3.5" 7 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 8 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 9 | dependencies: 10 | jsonparse "^1.2.0" 11 | through ">=2.2.7 <3" 12 | 13 | ansi-regex@^4.1.0: 14 | version "4.1.0" 15 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 16 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 17 | 18 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 19 | version "3.2.1" 20 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 21 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 22 | dependencies: 23 | color-convert "^1.9.0" 24 | 25 | array-find-index@^1.0.1: 26 | version "1.0.2" 27 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 28 | integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= 29 | 30 | array-ify@^1.0.0: 31 | version "1.0.0" 32 | resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" 33 | integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= 34 | 35 | arrify@^1.0.1: 36 | version "1.0.1" 37 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 38 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 39 | 40 | balanced-match@^1.0.0: 41 | version "1.0.0" 42 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 43 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 44 | 45 | brace-expansion@^1.1.7: 46 | version "1.1.11" 47 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 48 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 49 | dependencies: 50 | balanced-match "^1.0.0" 51 | concat-map "0.0.1" 52 | 53 | buffer-from@^1.0.0: 54 | version "1.1.1" 55 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 56 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 57 | 58 | camelcase-keys@^2.0.0: 59 | version "2.1.0" 60 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 61 | integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= 62 | dependencies: 63 | camelcase "^2.0.0" 64 | map-obj "^1.0.0" 65 | 66 | camelcase-keys@^4.0.0: 67 | version "4.2.0" 68 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" 69 | integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= 70 | dependencies: 71 | camelcase "^4.1.0" 72 | map-obj "^2.0.0" 73 | quick-lru "^1.0.0" 74 | 75 | camelcase@^2.0.0: 76 | version "2.1.1" 77 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 78 | integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= 79 | 80 | camelcase@^4.1.0: 81 | version "4.1.0" 82 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 83 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 84 | 85 | camelcase@^5.0.0: 86 | version "5.3.1" 87 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 88 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 89 | 90 | chalk@2.4.2: 91 | version "2.4.2" 92 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 93 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 94 | dependencies: 95 | ansi-styles "^3.2.1" 96 | escape-string-regexp "^1.0.5" 97 | supports-color "^5.3.0" 98 | 99 | cliui@^5.0.0: 100 | version "5.0.0" 101 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 102 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 103 | dependencies: 104 | string-width "^3.1.0" 105 | strip-ansi "^5.2.0" 106 | wrap-ansi "^5.1.0" 107 | 108 | color-convert@^1.9.0: 109 | version "1.9.3" 110 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 111 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 112 | dependencies: 113 | color-name "1.1.3" 114 | 115 | color-name@1.1.3: 116 | version "1.1.3" 117 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 118 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 119 | 120 | commander@~2.20.0: 121 | version "2.20.0" 122 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 123 | integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== 124 | 125 | compare-func@^1.3.1: 126 | version "1.3.2" 127 | resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" 128 | integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= 129 | dependencies: 130 | array-ify "^1.0.0" 131 | dot-prop "^3.0.0" 132 | 133 | concat-map@0.0.1: 134 | version "0.0.1" 135 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 136 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 137 | 138 | concat-stream@^2.0.0: 139 | version "2.0.0" 140 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" 141 | integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== 142 | dependencies: 143 | buffer-from "^1.0.0" 144 | inherits "^2.0.3" 145 | readable-stream "^3.0.2" 146 | typedarray "^0.0.6" 147 | 148 | conventional-changelog-angular@^5.0.3: 149 | version "5.0.3" 150 | resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" 151 | integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA== 152 | dependencies: 153 | compare-func "^1.3.1" 154 | q "^1.5.1" 155 | 156 | conventional-changelog-atom@^2.0.1: 157 | version "2.0.1" 158 | resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz#dc88ce650ffa9ceace805cbe70f88bfd0cb2c13a" 159 | integrity sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ== 160 | dependencies: 161 | q "^1.5.1" 162 | 163 | conventional-changelog-codemirror@^2.0.1: 164 | version "2.0.1" 165 | resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz#acc046bc0971460939a0cc2d390e5eafc5eb30da" 166 | integrity sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ== 167 | dependencies: 168 | q "^1.5.1" 169 | 170 | conventional-changelog-config-spec@2.0.0: 171 | version "2.0.0" 172 | resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.0.0.tgz#a9e8c9225d4a922d25f4ac501e454274ae4ad0b3" 173 | integrity sha512-zQmcBP/pR8tN5MSv+nXG9hOmy+Z6rgEquBerpoEbOKTFPLoxBy/adeUUpshrMpqdZ/ycqbT2AgdTtiIu/9IHGg== 174 | 175 | conventional-changelog-conventionalcommits@^4.0.0: 176 | version "4.1.0" 177 | resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.1.0.tgz#eb7d47a9c5f1a6f9846a649482294e4ac50d7683" 178 | integrity sha512-J3xolGrH8PTxpCqueHOuZtv3Cp73SQOWiBQzlsaugZAZ+hZgcJBonmC+1bQbfGs2neC2S18p2L1Gx+nTEglJTQ== 179 | dependencies: 180 | compare-func "^1.3.1" 181 | q "^1.5.1" 182 | 183 | conventional-changelog-core@^3.2.3: 184 | version "3.2.3" 185 | resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" 186 | integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== 187 | dependencies: 188 | conventional-changelog-writer "^4.0.6" 189 | conventional-commits-parser "^3.0.3" 190 | dateformat "^3.0.0" 191 | get-pkg-repo "^1.0.0" 192 | git-raw-commits "2.0.0" 193 | git-remote-origin-url "^2.0.0" 194 | git-semver-tags "^2.0.3" 195 | lodash "^4.2.1" 196 | normalize-package-data "^2.3.5" 197 | q "^1.5.1" 198 | read-pkg "^3.0.0" 199 | read-pkg-up "^3.0.0" 200 | through2 "^3.0.0" 201 | 202 | conventional-changelog-ember@^2.0.2: 203 | version "2.0.2" 204 | resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz#284ffdea8c83ea8c210b65c5b4eb3e5cc0f4f51a" 205 | integrity sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg== 206 | dependencies: 207 | q "^1.5.1" 208 | 209 | conventional-changelog-eslint@^3.0.2: 210 | version "3.0.2" 211 | resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz#e9eb088cda6be3e58b2de6a5aac63df0277f3cbe" 212 | integrity sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ== 213 | dependencies: 214 | q "^1.5.1" 215 | 216 | conventional-changelog-express@^2.0.1: 217 | version "2.0.1" 218 | resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz#fea2231d99a5381b4e6badb0c1c40a41fcacb755" 219 | integrity sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw== 220 | dependencies: 221 | q "^1.5.1" 222 | 223 | conventional-changelog-jquery@^3.0.4: 224 | version "3.0.4" 225 | resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz#7eb598467b83db96742178e1e8d68598bffcd7ae" 226 | integrity sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ== 227 | dependencies: 228 | q "^1.5.1" 229 | 230 | conventional-changelog-jshint@^2.0.1: 231 | version "2.0.1" 232 | resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz#11c0e8283abf156a4ff78e89be6fdedf9bd72202" 233 | integrity sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg== 234 | dependencies: 235 | compare-func "^1.3.1" 236 | q "^1.5.1" 237 | 238 | conventional-changelog-preset-loader@^2.1.1, conventional-changelog-preset-loader@^2.2.0: 239 | version "2.2.0" 240 | resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc" 241 | integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== 242 | 243 | conventional-changelog-writer@^4.0.6: 244 | version "4.0.7" 245 | resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz#e4b7d9cbea902394ad671f67108a71fa90c7095f" 246 | integrity sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw== 247 | dependencies: 248 | compare-func "^1.3.1" 249 | conventional-commits-filter "^2.0.2" 250 | dateformat "^3.0.0" 251 | handlebars "^4.1.2" 252 | json-stringify-safe "^5.0.1" 253 | lodash "^4.2.1" 254 | meow "^4.0.0" 255 | semver "^6.0.0" 256 | split "^1.0.0" 257 | through2 "^3.0.0" 258 | 259 | conventional-changelog@3.1.9: 260 | version "3.1.9" 261 | resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.9.tgz#5a6a19dadc1e4080c2db8dcddd00a6c0077c55a4" 262 | integrity sha512-JbNVm1iGZ3aXxcFZjqKNDNfdgchQjSltWc8rvSniMrkHLsub9Wn20/JLdJNTBM74dt1IA2M+v/mzServ6N37YA== 263 | dependencies: 264 | conventional-changelog-angular "^5.0.3" 265 | conventional-changelog-atom "^2.0.1" 266 | conventional-changelog-codemirror "^2.0.1" 267 | conventional-changelog-conventionalcommits "^4.0.0" 268 | conventional-changelog-core "^3.2.3" 269 | conventional-changelog-ember "^2.0.2" 270 | conventional-changelog-eslint "^3.0.2" 271 | conventional-changelog-express "^2.0.1" 272 | conventional-changelog-jquery "^3.0.4" 273 | conventional-changelog-jshint "^2.0.1" 274 | conventional-changelog-preset-loader "^2.1.1" 275 | 276 | conventional-commits-filter@^2.0.2: 277 | version "2.0.2" 278 | resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" 279 | integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== 280 | dependencies: 281 | lodash.ismatch "^4.4.0" 282 | modify-values "^1.0.0" 283 | 284 | conventional-commits-parser@^3.0.3: 285 | version "3.0.3" 286 | resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" 287 | integrity sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg== 288 | dependencies: 289 | JSONStream "^1.0.4" 290 | is-text-path "^2.0.0" 291 | lodash "^4.2.1" 292 | meow "^4.0.0" 293 | split2 "^2.0.0" 294 | through2 "^3.0.0" 295 | trim-off-newlines "^1.0.0" 296 | 297 | conventional-recommended-bump@6.0.0: 298 | version "6.0.0" 299 | resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.0.0.tgz#bdafad56bc32bc04d58dbbd8bd6b750375500edc" 300 | integrity sha512-iIHkDOuWCC49J/E4WXvXBCCrO2NoGqwjfhm2iUOHPPEik8TVHxczt/hFaWY+4MXeZ/nC53BNfjmlr8+EXOrlvA== 301 | dependencies: 302 | concat-stream "^2.0.0" 303 | conventional-changelog-preset-loader "^2.2.0" 304 | conventional-commits-filter "^2.0.2" 305 | conventional-commits-parser "^3.0.3" 306 | git-raw-commits "2.0.0" 307 | git-semver-tags "^3.0.0" 308 | meow "^4.0.0" 309 | q "^1.5.1" 310 | 311 | core-util-is@~1.0.0: 312 | version "1.0.2" 313 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 314 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 315 | 316 | currently-unhandled@^0.4.1: 317 | version "0.4.1" 318 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 319 | integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= 320 | dependencies: 321 | array-find-index "^1.0.1" 322 | 323 | dargs@^4.0.1: 324 | version "4.1.0" 325 | resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" 326 | integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= 327 | dependencies: 328 | number-is-nan "^1.0.0" 329 | 330 | dateformat@^3.0.0: 331 | version "3.0.3" 332 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" 333 | integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== 334 | 335 | decamelize-keys@^1.0.0: 336 | version "1.1.0" 337 | resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" 338 | integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= 339 | dependencies: 340 | decamelize "^1.1.0" 341 | map-obj "^1.0.0" 342 | 343 | decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: 344 | version "1.2.0" 345 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 346 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 347 | 348 | detect-indent@6.0.0: 349 | version "6.0.0" 350 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" 351 | integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== 352 | 353 | detect-newline@3.0.0: 354 | version "3.0.0" 355 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.0.0.tgz#8ae477c089e51872c264531cd6547719c0b86b2f" 356 | integrity sha512-JAP22dVPAqvhdRFFxK1G5GViIokyUn0UWXRNW0ztK96fsqi9cuM8w8ESbSk+T2w5OVorcMcL6m7yUg1RrX+2CA== 357 | 358 | dot-prop@^3.0.0: 359 | version "3.0.0" 360 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" 361 | integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= 362 | dependencies: 363 | is-obj "^1.0.0" 364 | 365 | dotgitignore@2.1.0: 366 | version "2.1.0" 367 | resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b" 368 | integrity sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA== 369 | dependencies: 370 | find-up "^3.0.0" 371 | minimatch "^3.0.4" 372 | 373 | emoji-regex@^7.0.1: 374 | version "7.0.3" 375 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 376 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 377 | 378 | error-ex@^1.2.0, error-ex@^1.3.1: 379 | version "1.3.2" 380 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 381 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 382 | dependencies: 383 | is-arrayish "^0.2.1" 384 | 385 | escape-string-regexp@^1.0.5: 386 | version "1.0.5" 387 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 388 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 389 | 390 | figures@3.0.0: 391 | version "3.0.0" 392 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.0.0.tgz#756275c964646163cc6f9197c7a0295dbfd04de9" 393 | integrity sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g== 394 | dependencies: 395 | escape-string-regexp "^1.0.5" 396 | 397 | find-up@4.1.0: 398 | version "4.1.0" 399 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 400 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 401 | dependencies: 402 | locate-path "^5.0.0" 403 | path-exists "^4.0.0" 404 | 405 | find-up@^1.0.0: 406 | version "1.1.2" 407 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 408 | integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= 409 | dependencies: 410 | path-exists "^2.0.0" 411 | pinkie-promise "^2.0.0" 412 | 413 | find-up@^2.0.0: 414 | version "2.1.0" 415 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 416 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 417 | dependencies: 418 | locate-path "^2.0.0" 419 | 420 | find-up@^3.0.0: 421 | version "3.0.0" 422 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 423 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 424 | dependencies: 425 | locate-path "^3.0.0" 426 | 427 | fs-access@1.0.1: 428 | version "1.0.1" 429 | resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" 430 | integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= 431 | dependencies: 432 | null-check "^1.0.0" 433 | 434 | get-caller-file@^2.0.1: 435 | version "2.0.5" 436 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 437 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 438 | 439 | get-pkg-repo@^1.0.0: 440 | version "1.4.0" 441 | resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" 442 | integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= 443 | dependencies: 444 | hosted-git-info "^2.1.4" 445 | meow "^3.3.0" 446 | normalize-package-data "^2.3.0" 447 | parse-github-repo-url "^1.3.0" 448 | through2 "^2.0.0" 449 | 450 | get-stdin@^4.0.1: 451 | version "4.0.1" 452 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 453 | integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= 454 | 455 | git-raw-commits@2.0.0: 456 | version "2.0.0" 457 | resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" 458 | integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== 459 | dependencies: 460 | dargs "^4.0.1" 461 | lodash.template "^4.0.2" 462 | meow "^4.0.0" 463 | split2 "^2.0.0" 464 | through2 "^2.0.0" 465 | 466 | git-remote-origin-url@^2.0.0: 467 | version "2.0.0" 468 | resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" 469 | integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= 470 | dependencies: 471 | gitconfiglocal "^1.0.0" 472 | pify "^2.3.0" 473 | 474 | git-semver-tags@3.0.0, git-semver-tags@^3.0.0: 475 | version "3.0.0" 476 | resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-3.0.0.tgz#fe10147824657662c82efd9341f0fa59f74ddcba" 477 | integrity sha512-T4C/gJ9k2Bnxz+PubtcyiMtUUKrC+Nh9Q4zaECcnmVMwJgPhrNyP/Rf+YpdRqsJbCV/+kYrCH24Xg+IeAmbOPg== 478 | dependencies: 479 | meow "^4.0.0" 480 | semver "^6.0.0" 481 | 482 | git-semver-tags@^2.0.3: 483 | version "2.0.3" 484 | resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" 485 | integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== 486 | dependencies: 487 | meow "^4.0.0" 488 | semver "^6.0.0" 489 | 490 | gitconfiglocal@^1.0.0: 491 | version "1.0.0" 492 | resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" 493 | integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= 494 | dependencies: 495 | ini "^1.3.2" 496 | 497 | graceful-fs@^4.1.2: 498 | version "4.2.2" 499 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" 500 | integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== 501 | 502 | handlebars@^4.1.2: 503 | version "4.1.2" 504 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" 505 | integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== 506 | dependencies: 507 | neo-async "^2.6.0" 508 | optimist "^0.6.1" 509 | source-map "^0.6.1" 510 | optionalDependencies: 511 | uglify-js "^3.1.4" 512 | 513 | has-flag@^3.0.0: 514 | version "3.0.0" 515 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 516 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 517 | 518 | hosted-git-info@^2.1.4: 519 | version "2.8.4" 520 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" 521 | integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== 522 | 523 | indent-string@^2.1.0: 524 | version "2.1.0" 525 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 526 | integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= 527 | dependencies: 528 | repeating "^2.0.0" 529 | 530 | indent-string@^3.0.0: 531 | version "3.2.0" 532 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" 533 | integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= 534 | 535 | inherits@^2.0.3, inherits@~2.0.3: 536 | version "2.0.4" 537 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 538 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 539 | 540 | ini@^1.3.2: 541 | version "1.3.5" 542 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 543 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== 544 | 545 | is-arrayish@^0.2.1: 546 | version "0.2.1" 547 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 548 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 549 | 550 | is-finite@^1.0.0: 551 | version "1.0.2" 552 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 553 | integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= 554 | dependencies: 555 | number-is-nan "^1.0.0" 556 | 557 | is-fullwidth-code-point@^2.0.0: 558 | version "2.0.0" 559 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 560 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 561 | 562 | is-obj@^1.0.0: 563 | version "1.0.1" 564 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 565 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 566 | 567 | is-plain-obj@^1.1.0: 568 | version "1.1.0" 569 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 570 | integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= 571 | 572 | is-text-path@^2.0.0: 573 | version "2.0.0" 574 | resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" 575 | integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== 576 | dependencies: 577 | text-extensions "^2.0.0" 578 | 579 | is-utf8@^0.2.0: 580 | version "0.2.1" 581 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 582 | integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= 583 | 584 | isarray@~1.0.0: 585 | version "1.0.0" 586 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 587 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 588 | 589 | json-parse-better-errors@^1.0.1: 590 | version "1.0.2" 591 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 592 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 593 | 594 | json-stringify-safe@^5.0.1: 595 | version "5.0.1" 596 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 597 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 598 | 599 | jsonparse@^1.2.0: 600 | version "1.3.1" 601 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 602 | integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= 603 | 604 | load-json-file@^1.0.0: 605 | version "1.1.0" 606 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 607 | integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= 608 | dependencies: 609 | graceful-fs "^4.1.2" 610 | parse-json "^2.2.0" 611 | pify "^2.0.0" 612 | pinkie-promise "^2.0.0" 613 | strip-bom "^2.0.0" 614 | 615 | load-json-file@^4.0.0: 616 | version "4.0.0" 617 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 618 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 619 | dependencies: 620 | graceful-fs "^4.1.2" 621 | parse-json "^4.0.0" 622 | pify "^3.0.0" 623 | strip-bom "^3.0.0" 624 | 625 | locate-path@^2.0.0: 626 | version "2.0.0" 627 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 628 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 629 | dependencies: 630 | p-locate "^2.0.0" 631 | path-exists "^3.0.0" 632 | 633 | locate-path@^3.0.0: 634 | version "3.0.0" 635 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 636 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 637 | dependencies: 638 | p-locate "^3.0.0" 639 | path-exists "^3.0.0" 640 | 641 | locate-path@^5.0.0: 642 | version "5.0.0" 643 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 644 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 645 | dependencies: 646 | p-locate "^4.1.0" 647 | 648 | lodash._reinterpolate@^3.0.0: 649 | version "3.0.0" 650 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" 651 | integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= 652 | 653 | lodash.ismatch@^4.4.0: 654 | version "4.4.0" 655 | resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" 656 | integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= 657 | 658 | lodash.template@^4.0.2: 659 | version "4.5.0" 660 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" 661 | integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== 662 | dependencies: 663 | lodash._reinterpolate "^3.0.0" 664 | lodash.templatesettings "^4.0.0" 665 | 666 | lodash.templatesettings@^4.0.0: 667 | version "4.2.0" 668 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" 669 | integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== 670 | dependencies: 671 | lodash._reinterpolate "^3.0.0" 672 | 673 | lodash@^4.2.1: 674 | version "4.17.15" 675 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 676 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 677 | 678 | loud-rejection@^1.0.0: 679 | version "1.6.0" 680 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 681 | integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= 682 | dependencies: 683 | currently-unhandled "^0.4.1" 684 | signal-exit "^3.0.0" 685 | 686 | map-obj@^1.0.0, map-obj@^1.0.1: 687 | version "1.0.1" 688 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 689 | integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= 690 | 691 | map-obj@^2.0.0: 692 | version "2.0.0" 693 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" 694 | integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= 695 | 696 | meow@^3.3.0: 697 | version "3.7.0" 698 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 699 | integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= 700 | dependencies: 701 | camelcase-keys "^2.0.0" 702 | decamelize "^1.1.2" 703 | loud-rejection "^1.0.0" 704 | map-obj "^1.0.1" 705 | minimist "^1.1.3" 706 | normalize-package-data "^2.3.4" 707 | object-assign "^4.0.1" 708 | read-pkg-up "^1.0.1" 709 | redent "^1.0.0" 710 | trim-newlines "^1.0.0" 711 | 712 | meow@^4.0.0: 713 | version "4.0.1" 714 | resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" 715 | integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== 716 | dependencies: 717 | camelcase-keys "^4.0.0" 718 | decamelize-keys "^1.0.0" 719 | loud-rejection "^1.0.0" 720 | minimist "^1.1.3" 721 | minimist-options "^3.0.1" 722 | normalize-package-data "^2.3.4" 723 | read-pkg-up "^3.0.0" 724 | redent "^2.0.0" 725 | trim-newlines "^2.0.0" 726 | 727 | minimatch@^3.0.4: 728 | version "3.0.4" 729 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 730 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 731 | dependencies: 732 | brace-expansion "^1.1.7" 733 | 734 | minimist-options@^3.0.1: 735 | version "3.0.2" 736 | resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" 737 | integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== 738 | dependencies: 739 | arrify "^1.0.1" 740 | is-plain-obj "^1.1.0" 741 | 742 | minimist@^1.1.3: 743 | version "1.2.0" 744 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 745 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 746 | 747 | minimist@~0.0.1: 748 | version "0.0.10" 749 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 750 | integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= 751 | 752 | modify-values@^1.0.0: 753 | version "1.0.1" 754 | resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" 755 | integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== 756 | 757 | nan@^2.14.0: 758 | version "2.14.0" 759 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" 760 | integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== 761 | 762 | neo-async@^2.6.0: 763 | version "2.6.1" 764 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" 765 | integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== 766 | 767 | normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: 768 | version "2.5.0" 769 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 770 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 771 | dependencies: 772 | hosted-git-info "^2.1.4" 773 | resolve "^1.10.0" 774 | semver "2 || 3 || 4 || 5" 775 | validate-npm-package-license "^3.0.1" 776 | 777 | null-check@^1.0.0: 778 | version "1.0.0" 779 | resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" 780 | integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= 781 | 782 | number-is-nan@^1.0.0: 783 | version "1.0.1" 784 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 785 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 786 | 787 | object-assign@^4.0.1: 788 | version "4.1.1" 789 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 790 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 791 | 792 | optimist@^0.6.1: 793 | version "0.6.1" 794 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 795 | integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 796 | dependencies: 797 | minimist "~0.0.1" 798 | wordwrap "~0.0.2" 799 | 800 | p-limit@^1.1.0: 801 | version "1.3.0" 802 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 803 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 804 | dependencies: 805 | p-try "^1.0.0" 806 | 807 | p-limit@^2.0.0, p-limit@^2.2.0: 808 | version "2.2.0" 809 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" 810 | integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== 811 | dependencies: 812 | p-try "^2.0.0" 813 | 814 | p-locate@^2.0.0: 815 | version "2.0.0" 816 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 817 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 818 | dependencies: 819 | p-limit "^1.1.0" 820 | 821 | p-locate@^3.0.0: 822 | version "3.0.0" 823 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 824 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 825 | dependencies: 826 | p-limit "^2.0.0" 827 | 828 | p-locate@^4.1.0: 829 | version "4.1.0" 830 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 831 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 832 | dependencies: 833 | p-limit "^2.2.0" 834 | 835 | p-try@^1.0.0: 836 | version "1.0.0" 837 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 838 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 839 | 840 | p-try@^2.0.0: 841 | version "2.2.0" 842 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 843 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 844 | 845 | parse-github-repo-url@^1.3.0: 846 | version "1.4.1" 847 | resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" 848 | integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= 849 | 850 | parse-json@^2.2.0: 851 | version "2.2.0" 852 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 853 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 854 | dependencies: 855 | error-ex "^1.2.0" 856 | 857 | parse-json@^4.0.0: 858 | version "4.0.0" 859 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 860 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 861 | dependencies: 862 | error-ex "^1.3.1" 863 | json-parse-better-errors "^1.0.1" 864 | 865 | path-exists@^2.0.0: 866 | version "2.1.0" 867 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 868 | integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= 869 | dependencies: 870 | pinkie-promise "^2.0.0" 871 | 872 | path-exists@^3.0.0: 873 | version "3.0.0" 874 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 875 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 876 | 877 | path-exists@^4.0.0: 878 | version "4.0.0" 879 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 880 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 881 | 882 | path-parse@^1.0.6: 883 | version "1.0.6" 884 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 885 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 886 | 887 | path-type@^1.0.0: 888 | version "1.1.0" 889 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 890 | integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= 891 | dependencies: 892 | graceful-fs "^4.1.2" 893 | pify "^2.0.0" 894 | pinkie-promise "^2.0.0" 895 | 896 | path-type@^3.0.0: 897 | version "3.0.0" 898 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 899 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 900 | dependencies: 901 | pify "^3.0.0" 902 | 903 | pify@^2.0.0, pify@^2.3.0: 904 | version "2.3.0" 905 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 906 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 907 | 908 | pify@^3.0.0: 909 | version "3.0.0" 910 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 911 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 912 | 913 | pinkie-promise@^2.0.0: 914 | version "2.0.1" 915 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 916 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 917 | dependencies: 918 | pinkie "^2.0.0" 919 | 920 | pinkie@^2.0.0: 921 | version "2.0.4" 922 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 923 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 924 | 925 | process-nextick-args@~2.0.0: 926 | version "2.0.1" 927 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 928 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 929 | 930 | q@^1.5.1: 931 | version "1.5.1" 932 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" 933 | integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= 934 | 935 | quick-lru@^1.0.0: 936 | version "1.1.0" 937 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" 938 | integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= 939 | 940 | read-pkg-up@^1.0.1: 941 | version "1.0.1" 942 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 943 | integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= 944 | dependencies: 945 | find-up "^1.0.0" 946 | read-pkg "^1.0.0" 947 | 948 | read-pkg-up@^3.0.0: 949 | version "3.0.0" 950 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" 951 | integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= 952 | dependencies: 953 | find-up "^2.0.0" 954 | read-pkg "^3.0.0" 955 | 956 | read-pkg@^1.0.0: 957 | version "1.1.0" 958 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 959 | integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= 960 | dependencies: 961 | load-json-file "^1.0.0" 962 | normalize-package-data "^2.3.2" 963 | path-type "^1.0.0" 964 | 965 | read-pkg@^3.0.0: 966 | version "3.0.0" 967 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 968 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 969 | dependencies: 970 | load-json-file "^4.0.0" 971 | normalize-package-data "^2.3.2" 972 | path-type "^3.0.0" 973 | 974 | "readable-stream@2 || 3", readable-stream@^3.0.2: 975 | version "3.4.0" 976 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" 977 | integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== 978 | dependencies: 979 | inherits "^2.0.3" 980 | string_decoder "^1.1.1" 981 | util-deprecate "^1.0.1" 982 | 983 | readable-stream@~2.3.6: 984 | version "2.3.6" 985 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 986 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 987 | dependencies: 988 | core-util-is "~1.0.0" 989 | inherits "~2.0.3" 990 | isarray "~1.0.0" 991 | process-nextick-args "~2.0.0" 992 | safe-buffer "~5.1.1" 993 | string_decoder "~1.1.1" 994 | util-deprecate "~1.0.1" 995 | 996 | redent@^1.0.0: 997 | version "1.0.0" 998 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 999 | integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= 1000 | dependencies: 1001 | indent-string "^2.1.0" 1002 | strip-indent "^1.0.1" 1003 | 1004 | redent@^2.0.0: 1005 | version "2.0.0" 1006 | resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" 1007 | integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= 1008 | dependencies: 1009 | indent-string "^3.0.0" 1010 | strip-indent "^2.0.0" 1011 | 1012 | repeating@^2.0.0: 1013 | version "2.0.1" 1014 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1015 | integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= 1016 | dependencies: 1017 | is-finite "^1.0.0" 1018 | 1019 | require-directory@^2.1.1: 1020 | version "2.1.1" 1021 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1022 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1023 | 1024 | require-main-filename@^2.0.0: 1025 | version "2.0.0" 1026 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1027 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1028 | 1029 | resolve@^1.10.0: 1030 | version "1.12.0" 1031 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" 1032 | integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== 1033 | dependencies: 1034 | path-parse "^1.0.6" 1035 | 1036 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1037 | version "5.1.2" 1038 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1039 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1040 | 1041 | safe-buffer@~5.2.0: 1042 | version "5.2.0" 1043 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 1044 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 1045 | 1046 | "semver@2 || 3 || 4 || 5": 1047 | version "5.7.1" 1048 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1049 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1050 | 1051 | semver@6.3.0, semver@^6.0.0: 1052 | version "6.3.0" 1053 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1054 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1055 | 1056 | set-blocking@^2.0.0: 1057 | version "2.0.0" 1058 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1059 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1060 | 1061 | signal-exit@^3.0.0: 1062 | version "3.0.2" 1063 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1064 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1065 | 1066 | source-map@^0.6.1, source-map@~0.6.1: 1067 | version "0.6.1" 1068 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1069 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1070 | 1071 | spdx-correct@^3.0.0: 1072 | version "3.1.0" 1073 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 1074 | integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== 1075 | dependencies: 1076 | spdx-expression-parse "^3.0.0" 1077 | spdx-license-ids "^3.0.0" 1078 | 1079 | spdx-exceptions@^2.1.0: 1080 | version "2.2.0" 1081 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 1082 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== 1083 | 1084 | spdx-expression-parse@^3.0.0: 1085 | version "3.0.0" 1086 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 1087 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 1088 | dependencies: 1089 | spdx-exceptions "^2.1.0" 1090 | spdx-license-ids "^3.0.0" 1091 | 1092 | spdx-license-ids@^3.0.0: 1093 | version "3.0.5" 1094 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" 1095 | integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== 1096 | 1097 | split2@^2.0.0: 1098 | version "2.2.0" 1099 | resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" 1100 | integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== 1101 | dependencies: 1102 | through2 "^2.0.2" 1103 | 1104 | split@^1.0.0: 1105 | version "1.0.1" 1106 | resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" 1107 | integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== 1108 | dependencies: 1109 | through "2" 1110 | 1111 | standard-version@7.0.0: 1112 | version "7.0.0" 1113 | resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-7.0.0.tgz#4ce10ea5d20270ed4a32b22d15cce5fd1f1a5bbb" 1114 | integrity sha512-pbFXM9vutnxTkSGkqSWQeYCMYqWmFBaLUNdEc/sJDQnMgwB0Csw3CZeeDhi62VoVS3P8mQiYbvXGZWyOBWxUbw== 1115 | dependencies: 1116 | chalk "2.4.2" 1117 | conventional-changelog "3.1.9" 1118 | conventional-changelog-config-spec "2.0.0" 1119 | conventional-recommended-bump "6.0.0" 1120 | detect-indent "6.0.0" 1121 | detect-newline "3.0.0" 1122 | dotgitignore "2.1.0" 1123 | figures "3.0.0" 1124 | find-up "4.1.0" 1125 | fs-access "1.0.1" 1126 | git-semver-tags "3.0.0" 1127 | semver "6.3.0" 1128 | stringify-package "1.0.0" 1129 | yargs "13.3.0" 1130 | 1131 | string-width@^3.0.0, string-width@^3.1.0: 1132 | version "3.1.0" 1133 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1134 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1135 | dependencies: 1136 | emoji-regex "^7.0.1" 1137 | is-fullwidth-code-point "^2.0.0" 1138 | strip-ansi "^5.1.0" 1139 | 1140 | string_decoder@^1.1.1: 1141 | version "1.3.0" 1142 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1143 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1144 | dependencies: 1145 | safe-buffer "~5.2.0" 1146 | 1147 | string_decoder@~1.1.1: 1148 | version "1.1.1" 1149 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1150 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1151 | dependencies: 1152 | safe-buffer "~5.1.0" 1153 | 1154 | stringify-package@1.0.0: 1155 | version "1.0.0" 1156 | resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.0.tgz#e02828089333d7d45cd8c287c30aa9a13375081b" 1157 | integrity sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g== 1158 | 1159 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1160 | version "5.2.0" 1161 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1162 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1163 | dependencies: 1164 | ansi-regex "^4.1.0" 1165 | 1166 | strip-bom@^2.0.0: 1167 | version "2.0.0" 1168 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 1169 | integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= 1170 | dependencies: 1171 | is-utf8 "^0.2.0" 1172 | 1173 | strip-bom@^3.0.0: 1174 | version "3.0.0" 1175 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1176 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1177 | 1178 | strip-indent@^1.0.1: 1179 | version "1.0.1" 1180 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 1181 | integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= 1182 | dependencies: 1183 | get-stdin "^4.0.1" 1184 | 1185 | strip-indent@^2.0.0: 1186 | version "2.0.0" 1187 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" 1188 | integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= 1189 | 1190 | supports-color@^5.3.0: 1191 | version "5.5.0" 1192 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1193 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1194 | dependencies: 1195 | has-flag "^3.0.0" 1196 | 1197 | text-extensions@^2.0.0: 1198 | version "2.0.0" 1199 | resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" 1200 | integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ== 1201 | 1202 | through2@^2.0.0, through2@^2.0.2: 1203 | version "2.0.5" 1204 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" 1205 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== 1206 | dependencies: 1207 | readable-stream "~2.3.6" 1208 | xtend "~4.0.1" 1209 | 1210 | through2@^3.0.0: 1211 | version "3.0.1" 1212 | resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" 1213 | integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== 1214 | dependencies: 1215 | readable-stream "2 || 3" 1216 | 1217 | through@2, "through@>=2.2.7 <3": 1218 | version "2.3.8" 1219 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1220 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1221 | 1222 | tree-sitter-html@0.19.0: 1223 | version "0.19.0" 1224 | resolved "https://registry.yarnpkg.com/tree-sitter-html/-/tree-sitter-html-0.19.0.tgz#abebe9950f5ce909b6e3e8da2e90246647a70a22" 1225 | integrity sha512-xH6XGSBWzb4oU/aG6gouMRQKsd96iKuy0zboUqo3wcIWrA++q9a7CmQTSeIINiSfOXjT2ZLJciXFDgAh6h04Bw== 1226 | dependencies: 1227 | nan "^2.14.0" 1228 | 1229 | trim-newlines@^1.0.0: 1230 | version "1.0.0" 1231 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 1232 | integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= 1233 | 1234 | trim-newlines@^2.0.0: 1235 | version "2.0.0" 1236 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" 1237 | integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= 1238 | 1239 | trim-off-newlines@^1.0.0: 1240 | version "1.0.1" 1241 | resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" 1242 | integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= 1243 | 1244 | typedarray@^0.0.6: 1245 | version "0.0.6" 1246 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1247 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 1248 | 1249 | uglify-js@^3.1.4: 1250 | version "3.6.0" 1251 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" 1252 | integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== 1253 | dependencies: 1254 | commander "~2.20.0" 1255 | source-map "~0.6.1" 1256 | 1257 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 1258 | version "1.0.2" 1259 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1260 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1261 | 1262 | validate-npm-package-license@^3.0.1: 1263 | version "3.0.4" 1264 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1265 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1266 | dependencies: 1267 | spdx-correct "^3.0.0" 1268 | spdx-expression-parse "^3.0.0" 1269 | 1270 | which-module@^2.0.0: 1271 | version "2.0.0" 1272 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1273 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1274 | 1275 | wordwrap@~0.0.2: 1276 | version "0.0.3" 1277 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 1278 | integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 1279 | 1280 | wrap-ansi@^5.1.0: 1281 | version "5.1.0" 1282 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1283 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 1284 | dependencies: 1285 | ansi-styles "^3.2.0" 1286 | string-width "^3.0.0" 1287 | strip-ansi "^5.0.0" 1288 | 1289 | xtend@~4.0.1: 1290 | version "4.0.2" 1291 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1292 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1293 | 1294 | y18n@^4.0.0: 1295 | version "4.0.1" 1296 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" 1297 | integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== 1298 | 1299 | yargs-parser@^13.1.1: 1300 | version "13.1.1" 1301 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 1302 | integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 1303 | dependencies: 1304 | camelcase "^5.0.0" 1305 | decamelize "^1.2.0" 1306 | 1307 | yargs@13.3.0: 1308 | version "13.3.0" 1309 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" 1310 | integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== 1311 | dependencies: 1312 | cliui "^5.0.0" 1313 | find-up "^3.0.0" 1314 | get-caller-file "^2.0.1" 1315 | require-directory "^2.1.1" 1316 | require-main-filename "^2.0.0" 1317 | set-blocking "^2.0.0" 1318 | string-width "^3.0.0" 1319 | which-module "^2.0.0" 1320 | y18n "^4.0.0" 1321 | yargs-parser "^13.1.1" 1322 | --------------------------------------------------------------------------------