]> git.r.bdr.sh - rbdr/tree-sitter-api-notation/commitdiff
Initial Commit
authorRuben Beltran del Rio <redacted>
Wed, 4 Oct 2023 11:39:56 +0000 (13:39 +0200)
committerRuben Beltran del Rio <redacted>
Wed, 4 Oct 2023 11:39:56 +0000 (13:39 +0200)
17 files changed:
.gitignore [new file with mode: 0644]
Cargo.toml [new file with mode: 0644]
binding.gyp [new file with mode: 0644]
bindings/node/binding.cc [new file with mode: 0644]
bindings/node/index.js [new file with mode: 0644]
bindings/rust/build.rs [new file with mode: 0644]
bindings/rust/lib.rs [new file with mode: 0644]
grammar.js [new file with mode: 0644]
package-lock.json [new file with mode: 0644]
package.json [new file with mode: 0644]
queries/highlights.scm [new file with mode: 0644]
src/grammar.json [new file with mode: 0644]
src/node-types.json [new file with mode: 0644]
src/parser.c [new file with mode: 0644]
src/tree_sitter/parser.h [new file with mode: 0644]
test/corpus/notation.txt [new file with mode: 0644]
test/highlight/notation.api [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..b8cf98d
--- /dev/null
@@ -0,0 +1,3 @@
+.tool-versions
+node_modules
+build
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644 (file)
index 0000000..90deb28
--- /dev/null
@@ -0,0 +1,26 @@
+[package]
+name = "tree-sitter-apinotation"
+description = "apinotation grammar for the tree-sitter parsing library"
+version = "0.0.1"
+keywords = ["incremental", "parsing", "apinotation"]
+categories = ["parsing", "text-editors"]
+repository = "https://github.com/tree-sitter/tree-sitter-apinotation"
+edition = "2018"
+license = "MIT"
+
+build = "bindings/rust/build.rs"
+include = [
+  "bindings/rust/*",
+  "grammar.js",
+  "queries/*",
+  "src/*",
+]
+
+[lib]
+path = "bindings/rust/lib.rs"
+
+[dependencies]
+tree-sitter = "~0.20.10"
+
+[build-dependencies]
+cc = "1.0"
diff --git a/binding.gyp b/binding.gyp
new file mode 100644 (file)
index 0000000..9b1689e
--- /dev/null
@@ -0,0 +1,19 @@
+{
+  "targets": [
+    {
+      "target_name": "tree_sitter_apinotation_binding",
+      "include_dirs": [
+        "<!(node -e \"require('nan')\")",
+        "src"
+      ],
+      "sources": [
+        "bindings/node/binding.cc",
+        "src/parser.c",
+        # If your language uses an external scanner, add it here.
+      ],
+      "cflags_c": [
+        "-std=c99",
+      ]
+    }
+  ]
+}
diff --git a/bindings/node/binding.cc b/bindings/node/binding.cc
new file mode 100644 (file)
index 0000000..54f34ac
--- /dev/null
@@ -0,0 +1,28 @@
+#include "tree_sitter/parser.h"
+#include <node.h>
+#include "nan.h"
+
+using namespace v8;
+
+extern "C" TSLanguage * tree_sitter_apinotation();
+
+namespace {
+
+NAN_METHOD(New) {}
+
+void Init(Local<Object> exports, Local<Object> module) {
+  Local<FunctionTemplate> tpl = Nan::New<FunctionTemplate>(New);
+  tpl->SetClassName(Nan::New("Language").ToLocalChecked());
+  tpl->InstanceTemplate()->SetInternalFieldCount(1);
+
+  Local<Function> constructor = Nan::GetFunction(tpl).ToLocalChecked();
+  Local<Object> instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked();
+  Nan::SetInternalFieldPointer(instance, 0, tree_sitter_apinotation());
+
+  Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("apinotation").ToLocalChecked());
+  Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance);
+}
+
+NODE_MODULE(tree_sitter_apinotation_binding, Init)
+
+}  // namespace
diff --git a/bindings/node/index.js b/bindings/node/index.js
new file mode 100644 (file)
index 0000000..d7f66fd
--- /dev/null
@@ -0,0 +1,19 @@
+try {
+  module.exports = require("../../build/Release/tree_sitter_apinotation_binding");
+} catch (error1) {
+  if (error1.code !== 'MODULE_NOT_FOUND') {
+    throw error1;
+  }
+  try {
+    module.exports = require("../../build/Debug/tree_sitter_apinotation_binding");
+  } catch (error2) {
+    if (error2.code !== 'MODULE_NOT_FOUND') {
+      throw error2;
+    }
+    throw error1
+  }
+}
+
+try {
+  module.exports.nodeTypeInfo = require("../../src/node-types.json");
+} catch (_) {}
diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs
new file mode 100644 (file)
index 0000000..c6061f0
--- /dev/null
@@ -0,0 +1,40 @@
+fn main() {
+    let src_dir = std::path::Path::new("src");
+
+    let mut c_config = cc::Build::new();
+    c_config.include(&src_dir);
+    c_config
+        .flag_if_supported("-Wno-unused-parameter")
+        .flag_if_supported("-Wno-unused-but-set-variable")
+        .flag_if_supported("-Wno-trigraphs");
+    let parser_path = src_dir.join("parser.c");
+    c_config.file(&parser_path);
+
+    // If your language uses an external scanner written in C,
+    // then include this block of code:
+
+    /*
+    let scanner_path = src_dir.join("scanner.c");
+    c_config.file(&scanner_path);
+    println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
+    */
+
+    c_config.compile("parser");
+    println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
+
+    // If your language uses an external scanner written in C++,
+    // then include this block of code:
+
+    /*
+    let mut cpp_config = cc::Build::new();
+    cpp_config.cpp(true);
+    cpp_config.include(&src_dir);
+    cpp_config
+        .flag_if_supported("-Wno-unused-parameter")
+        .flag_if_supported("-Wno-unused-but-set-variable");
+    let scanner_path = src_dir.join("scanner.cc");
+    cpp_config.file(&scanner_path);
+    cpp_config.compile("scanner");
+    println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
+    */
+}
diff --git a/bindings/rust/lib.rs b/bindings/rust/lib.rs
new file mode 100644 (file)
index 0000000..ee3d344
--- /dev/null
@@ -0,0 +1,52 @@
+//! This crate provides apinotation language support for the [tree-sitter][] parsing library.
+//!
+//! Typically, you will use the [language][language func] function to add this language to a
+//! tree-sitter [Parser][], and then use the parser to parse some code:
+//!
+//! ```
+//! let code = "";
+//! let mut parser = tree_sitter::Parser::new();
+//! parser.set_language(tree_sitter_apinotation::language()).expect("Error loading apinotation grammar");
+//! let tree = parser.parse(code, None).unwrap();
+//! ```
+//!
+//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
+//! [language func]: fn.language.html
+//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html
+//! [tree-sitter]: https://tree-sitter.github.io/
+
+use tree_sitter::Language;
+
+extern "C" {
+    fn tree_sitter_apinotation() -> Language;
+}
+
+/// Get the tree-sitter [Language][] for this grammar.
+///
+/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
+pub fn language() -> Language {
+    unsafe { tree_sitter_apinotation() }
+}
+
+/// The content of the [`node-types.json`][] file for this grammar.
+///
+/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
+pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json");
+
+// Uncomment these to include any queries that this grammar contains
+
+// pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm");
+// pub const INJECTIONS_QUERY: &'static str = include_str!("../../queries/injections.scm");
+// pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm");
+// pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm");
+
+#[cfg(test)]
+mod tests {
+    #[test]
+    fn test_can_load_grammar() {
+        let mut parser = tree_sitter::Parser::new();
+        parser
+            .set_language(super::language())
+            .expect("Error loading apinotation language");
+    }
+}
diff --git a/grammar.js b/grammar.js
new file mode 100644 (file)
index 0000000..e74c27b
--- /dev/null
@@ -0,0 +1,105 @@
+module.exports = grammar({
+  name: 'apinotation',
+
+  rules: {
+    source_file: $ => repeat(
+      seq(
+        choice(
+          $.definition,
+          $.comment
+        ),
+        repeat($._newline)
+      )
+    ),
+    definition: $ => prec.right(seq(
+      $.entry,
+      $._newline,
+      repeat(
+        choice(
+          $.member,
+          $.comment
+        )
+      )
+    )),
+    entry: $ => prec.right(seq(
+      $.identifier,
+      repeat(
+        seq(
+          token('.'),
+          $.identifier
+        )
+      )
+    )),
+    member: $ => seq(
+      $.member_type,
+      $._label,
+      optional($.type_annotation),
+      optional($.parameter_list),
+      optional($.return_statement),
+      optional($.throw_statement),
+      $._newline,
+    ),
+    member_type: $ => choice(
+      '::',
+      '->',
+      '<-',
+      '~>',
+      '<~',
+      '+>',
+      '<+',
+      '#',
+      '+',
+      '-'
+    ),
+    parameter_list: $ => seq(
+      '(',
+        optional($._identifier_list),
+      ')'
+    ),
+    return_statement: $ => seq(
+      '=>',
+      $.entry
+    ),
+    throw_statement: $ => seq(
+      '#>',
+      $._entry_list
+    ),
+    _entry_list: $ => prec.left(seq(
+      $.entry,
+      repeat(
+        seq(
+          ',',
+          $.entry
+        )
+      )
+    )),
+    _identifier_list: $ => seq(
+      $.identifier,
+      repeat(
+        seq(
+          ',',
+          $.identifier
+        )
+      )
+    ),
+    identifier: $ => prec.left(seq(
+      $._label,
+      optional($.type_annotation),
+      optional($.parameter_list),
+      optional($.return_statement),
+      optional($.throw_statement),
+    )),
+    type_annotation: $ => seq(
+      '<',
+      $._entry_list,
+      '>'
+    ),
+    comment: $ => seq(
+      '//',
+      /[^\n]*/,
+      $._newline,
+    ),
+    _label: $ => /[a-zA-Z0-9][a-zA-Z0-9_-]*/,
+    _newline: $ => token('\n')
+  }
+});
diff --git a/package-lock.json b/package-lock.json
new file mode 100644 (file)
index 0000000..005b050
--- /dev/null
@@ -0,0 +1,2143 @@
+{
+  "name": "tree-sitter-api-notation",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "tree-sitter-api-notation",
+      "version": "1.0.0",
+      "license": "MIT",
+      "dependencies": {
+        "nan": "^2.18.0"
+      },
+      "devDependencies": {
+        "tree-sitter-cli": "^0.20.8"
+      }
+    },
+    "node_modules/.pnpm/nan@2.18.0/node_modules/nan": {
+      "version": "2.18.0",
+      "license": "MIT",
+      "devDependencies": {
+        "bindings": "~1.2.1",
+        "commander": "^2.8.1",
+        "glob": "^5.0.14",
+        "node-gyp": "~8.4.1",
+        "readable-stream": "^2.1.4",
+        "request": "=2.81.0",
+        "tap": "~0.7.1",
+        "xtend": "~4.0.0"
+      }
+    },
+    "node_modules/.pnpm/tree-sitter-cli@0.20.8/node_modules/tree-sitter-cli": {
+      "version": "0.20.8",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "tree-sitter": "cli.js"
+      }
+    },
+    "node_modules/@gar/promisify": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+      "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+      "dev": true
+    },
+    "node_modules/@npmcli/fs": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+      "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+      "dev": true,
+      "dependencies": {
+        "@gar/promisify": "^1.0.1",
+        "semver": "^7.3.5"
+      }
+    },
+    "node_modules/@npmcli/move-file": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+      "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+      "deprecated": "This functionality has been moved to @npmcli/fs",
+      "dev": true,
+      "dependencies": {
+        "mkdirp": "^1.0.4",
+        "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@tootallnate/once": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+      "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true
+    },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dev": true,
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
+    "node_modules/agentkeepalive": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
+      "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
+      "dev": true,
+      "dependencies": {
+        "humanize-ms": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
+      }
+    },
+    "node_modules/aggregate-error": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+      "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+      "dev": true,
+      "dependencies": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ajv": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+      "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==",
+      "dev": true,
+      "dependencies": {
+        "co": "^4.6.0",
+        "json-stable-stringify": "^1.0.1"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/aproba": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+      "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
+      "dev": true
+    },
+    "node_modules/are-we-there-yet": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+      "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
+      "dev": true,
+      "dependencies": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^3.6.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/are-we-there-yet/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dev": true,
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/asn1": {
+      "version": "0.2.6",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+      "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+      "dev": true,
+      "dependencies": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "node_modules/assert-plus": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+      "integrity": "sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+      "dev": true
+    },
+    "node_modules/aws-sign2": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+      "integrity": "sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/aws4": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+      "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
+      "dev": true
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true
+    },
+    "node_modules/bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+      "dev": true,
+      "dependencies": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "node_modules/bindings": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
+      "integrity": "sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g==",
+      "dev": true
+    },
+    "node_modules/boom": {
+      "version": "2.10.1",
+      "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+      "integrity": "sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==",
+      "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
+      "dev": true,
+      "dependencies": {
+        "hoek": "2.x.x"
+      },
+      "engines": {
+        "node": ">=0.10.40"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/buffer-equal": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.2.tgz",
+      "integrity": "sha512-4hr0gS7+NK47X6WbA/okVFrN5qGh3WLT7N3hMRv7+hlkXnbUIdU2u05n6r0RQv6cq6xke06nVl70r0NW0WM2OQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/bunker": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/bunker/-/bunker-0.1.2.tgz",
+      "integrity": "sha512-YnahkcXBNT522S46k5LUA9P18lzvgkunbMl0qIJQ8oeRMQ+dAg3YI3k32q5TnO+AAUErFHO6R768To6jslgYmQ==",
+      "dev": true,
+      "dependencies": {
+        "burrito": ">=0.2.5 <0.3"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/burrito": {
+      "version": "0.2.12",
+      "resolved": "https://registry.npmjs.org/burrito/-/burrito-0.2.12.tgz",
+      "integrity": "sha512-ZhhT5iVTAgzQ+s8rily7m45Swxe/cU3dVCHTzqmHVWD/cc0Ds3W4Q4MExbkevY+fm0Me3lEwpehIy6TH7p+ehw==",
+      "dev": true,
+      "dependencies": {
+        "traverse": "~0.5.1",
+        "uglify-js": "~1.1.1"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/burrito/node_modules/traverse": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.5.2.tgz",
+      "integrity": "sha512-PUBVcfB3RqgLpzgTRGNiqK4duqrDbgGa1bobbUtzUwLiBNAjZ7vd5eCOdBxqZ/Fgezagr9o69IxP2fZp41RGFA==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/cacache": {
+      "version": "15.3.0",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
+      "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+      "dev": true,
+      "dependencies": {
+        "@npmcli/fs": "^1.0.0",
+        "@npmcli/move-file": "^1.0.1",
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "glob": "^7.1.4",
+        "infer-owner": "^1.0.4",
+        "lru-cache": "^6.0.0",
+        "minipass": "^3.1.1",
+        "minipass-collect": "^1.0.2",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.2",
+        "mkdirp": "^1.0.3",
+        "p-map": "^4.0.0",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^3.0.2",
+        "ssri": "^8.0.1",
+        "tar": "^6.0.2",
+        "unique-filename": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/cacache/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/call-bind": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+      "dev": true
+    },
+    "node_modules/charm": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz",
+      "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==",
+      "dev": true
+    },
+    "node_modules/chownr": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+      "dev": true,
+      "engines": {
+        "iojs": ">= 1.0.0",
+        "node": ">= 0.12.0"
+      }
+    },
+    "node_modules/color-support": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+      "dev": true,
+      "bin": {
+        "color-support": "bin.js"
+      }
+    },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dev": true,
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+      "dev": true
+    },
+    "node_modules/console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
+      "dev": true
+    },
+    "node_modules/core-util-is": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+      "dev": true
+    },
+    "node_modules/cryptiles": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+      "integrity": "sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==",
+      "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
+      "dev": true,
+      "dependencies": {
+        "boom": "2.x.x"
+      },
+      "engines": {
+        "node": ">=0.10.40"
+      }
+    },
+    "node_modules/dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+      "dev": true,
+      "dependencies": {
+        "assert-plus": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/dashdash/node_modules/assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/deep-equal": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+      "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+      "dev": true,
+      "dependencies": {
+        "is-arguments": "^1.0.4",
+        "is-date-object": "^1.0.1",
+        "is-regex": "^1.0.4",
+        "object-is": "^1.0.1",
+        "object-keys": "^1.1.1",
+        "regexp.prototype.flags": "^1.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/deep-is": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+      "dev": true
+    },
+    "node_modules/define-data-property": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz",
+      "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.2.1",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/define-properties": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+      "dev": true,
+      "dependencies": {
+        "define-data-property": "^1.0.1",
+        "has-property-descriptors": "^1.0.0",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
+      "dev": true
+    },
+    "node_modules/difflet": {
+      "version": "0.2.6",
+      "resolved": "https://registry.npmjs.org/difflet/-/difflet-0.2.6.tgz",
+      "integrity": "sha512-ruldDDRmY1t678UOAJBng6sL77f62SqjHj0498YC0EJhxIe2yKkqJn2qEchwG3eU/dqJ/RxPZkAnYjePS4pDCw==",
+      "dev": true,
+      "dependencies": {
+        "charm": "0.1.x",
+        "deep-is": "0.1.x",
+        "traverse": "0.6.x"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+      "dev": true,
+      "dependencies": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
+    "node_modules/encoding": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+      "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+      "dev": true,
+      "optional": true,
+      "dependencies": {
+        "iconv-lite": "^0.6.2"
+      }
+    },
+    "node_modules/env-paths": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+      "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/err-code": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+      "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+      "dev": true
+    },
+    "node_modules/extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
+    },
+    "node_modules/extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+      "dev": true,
+      "engines": [
+        "node >=0.6.0"
+      ]
+    },
+    "node_modules/forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/form-data": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+      "integrity": "sha512-8HWGSLAPr+AG0hBpsqi5Ob8HrLStN/LWeqhpFl14d7FJgHK48TmgLoALPz69XSUR65YJzDfLUX/BM8+MLJLghQ==",
+      "dev": true,
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.5",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 0.12"
+      }
+    },
+    "node_modules/fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+      "dev": true
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "node_modules/functions-have-names": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/gauge": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+      "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
+      "dev": true,
+      "dependencies": {
+        "aproba": "^1.0.3 || ^2.0.0",
+        "color-support": "^1.1.3",
+        "console-control-strings": "^1.1.0",
+        "has-unicode": "^2.0.1",
+        "signal-exit": "^3.0.7",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1",
+        "wide-align": "^1.1.5"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+      "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+      "dev": true,
+      "dependencies": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "node_modules/getpass/node_modules/assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/glob": {
+      "version": "5.0.15",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+      "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+      "dev": true,
+      "dependencies": {
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "2 || 3",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.1.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "dev": true
+    },
+    "node_modules/har-schema": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+      "integrity": "sha512-f8xf2GOR6Rgwc9FPTLNzgwB+JQ2/zMauYXSWmX5YV5acex6VomT0ocSuwR7BfXo5MpHi+jL+saaux2fwsGJDKQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/har-validator": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+      "integrity": "sha512-5Gbp6RAftMYYV3UEI4c4Vv3+a4dQ7taVyvHt+/L6kRt+f4HX1GweAk5UDWN0SvdVnRBzGQ6OG89pGaD9uSFnVw==",
+      "deprecated": "this library is no longer supported",
+      "dev": true,
+      "dependencies": {
+        "ajv": "^4.9.1",
+        "har-schema": "^1.0.5"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/has": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
+      "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.1.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-tostringtag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+      "dev": true,
+      "dependencies": {
+        "has-symbols": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
+      "dev": true
+    },
+    "node_modules/hawk": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+      "integrity": "sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==",
+      "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.",
+      "dev": true,
+      "dependencies": {
+        "boom": "2.x.x",
+        "cryptiles": "2.x.x",
+        "hoek": "2.x.x",
+        "sntp": "1.x.x"
+      },
+      "engines": {
+        "node": ">=0.10.32"
+      }
+    },
+    "node_modules/hoek": {
+      "version": "2.16.3",
+      "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+      "integrity": "sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==",
+      "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.40"
+      }
+    },
+    "node_modules/http-cache-semantics": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+      "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
+      "dev": true
+    },
+    "node_modules/http-proxy-agent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+      "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+      "dev": true,
+      "dependencies": {
+        "@tootallnate/once": "1",
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/http-signature": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+      "integrity": "sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg==",
+      "dev": true,
+      "dependencies": {
+        "assert-plus": "^0.2.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      },
+      "engines": {
+        "node": ">=0.8",
+        "npm": ">=1.3.7"
+      }
+    },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dev": true,
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/humanize-ms": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+      "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "^2.0.0"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+      "dev": true,
+      "optional": true,
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.19"
+      }
+    },
+    "node_modules/indent-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+      "dev": true
+    },
+    "node_modules/inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "dev": true,
+      "dependencies": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true
+    },
+    "node_modules/ip": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+      "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
+      "dev": true
+    },
+    "node_modules/is-arguments": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+      "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-date-object": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+      "dev": true,
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-lambda": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+      "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
+      "dev": true
+    },
+    "node_modules/is-regex": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+      "dev": true
+    },
+    "node_modules/isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+      "dev": true
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true
+    },
+    "node_modules/isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+      "dev": true
+    },
+    "node_modules/jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+      "dev": true
+    },
+    "node_modules/json-schema": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+      "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+      "dev": true
+    },
+    "node_modules/json-stable-stringify": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz",
+      "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==",
+      "dev": true,
+      "dependencies": {
+        "jsonify": "^0.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+      "dev": true
+    },
+    "node_modules/jsonify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
+      "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/jsprim": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+      "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+      "dev": true,
+      "dependencies": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.4.0",
+        "verror": "1.10.0"
+      },
+      "engines": {
+        "node": ">=0.6.0"
+      }
+    },
+    "node_modules/jsprim/node_modules/assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/make-fetch-happen": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
+      "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
+      "dev": true,
+      "dependencies": {
+        "agentkeepalive": "^4.1.3",
+        "cacache": "^15.2.0",
+        "http-cache-semantics": "^4.1.0",
+        "http-proxy-agent": "^4.0.1",
+        "https-proxy-agent": "^5.0.0",
+        "is-lambda": "^1.0.1",
+        "lru-cache": "^6.0.0",
+        "minipass": "^3.1.3",
+        "minipass-collect": "^1.0.2",
+        "minipass-fetch": "^1.3.2",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        "negotiator": "^0.6.2",
+        "promise-retry": "^2.0.1",
+        "socks-proxy-agent": "^6.0.0",
+        "ssri": "^8.0.0"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dev": true,
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+      "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minipass-fetch": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
+      "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.1.0",
+        "minipass-sized": "^1.0.3",
+        "minizlib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "optionalDependencies": {
+        "encoding": "^0.1.12"
+      }
+    },
+    "node_modules/minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-sized": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+      "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "dev": true,
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "dev": true
+    },
+    "node_modules/nan": {
+      "resolved": "node_modules/.pnpm/nan@2.18.0/node_modules/nan",
+      "link": true
+    },
+    "node_modules/negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/node-gyp": {
+      "version": "8.4.1",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
+      "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
+      "dev": true,
+      "dependencies": {
+        "env-paths": "^2.2.0",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.2.6",
+        "make-fetch-happen": "^9.1.0",
+        "nopt": "^5.0.0",
+        "npmlog": "^6.0.0",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.5",
+        "tar": "^6.1.2",
+        "which": "^2.0.2"
+      },
+      "bin": {
+        "node-gyp": "bin/node-gyp.js"
+      },
+      "engines": {
+        "node": ">= 10.12.0"
+      }
+    },
+    "node_modules/node-gyp/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/nopt": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+      "dev": true,
+      "dependencies": {
+        "abbrev": "1"
+      },
+      "bin": {
+        "nopt": "bin/nopt.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/npmlog": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+      "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
+      "dev": true,
+      "dependencies": {
+        "are-we-there-yet": "^3.0.0",
+        "console-control-strings": "^1.1.0",
+        "gauge": "^4.0.3",
+        "set-blocking": "^2.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/oauth-sign": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+      "integrity": "sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/object-is": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+      "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "dev": true,
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/p-map": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+      "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+      "dev": true,
+      "dependencies": {
+        "aggregate-error": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/performance-now": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+      "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==",
+      "dev": true
+    },
+    "node_modules/process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+      "dev": true
+    },
+    "node_modules/promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
+      "dev": true
+    },
+    "node_modules/promise-retry": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+      "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+      "dev": true,
+      "dependencies": {
+        "err-code": "^2.0.2",
+        "retry": "^0.12.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/punycode": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+      "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+      "dev": true
+    },
+    "node_modules/qs": {
+      "version": "6.4.1",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.1.tgz",
+      "integrity": "sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "dev": true,
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/regexp.prototype.flags": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+      "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "set-function-name": "^2.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/request": {
+      "version": "2.81.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+      "integrity": "sha512-IZnsR7voF0miGSu29EXPRgPTuEsI/+aibNSBbN1pplrfartF5wDYGADz3iD9vmBVf2r00rckWZf8BtS5kk7Niw==",
+      "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+      "dev": true,
+      "dependencies": {
+        "aws-sign2": "~0.6.0",
+        "aws4": "^1.2.1",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.5",
+        "extend": "~3.0.0",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.1.1",
+        "har-validator": "~4.2.1",
+        "hawk": "~3.1.3",
+        "http-signature": "~1.1.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.7",
+        "oauth-sign": "~0.8.1",
+        "performance-now": "^0.2.0",
+        "qs": "~6.4.0",
+        "safe-buffer": "^5.0.1",
+        "stringstream": "~0.0.4",
+        "tough-cookie": "~2.3.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/retry": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+      "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+      "dev": true,
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dev": true,
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/rimraf/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/runforcover": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/runforcover/-/runforcover-0.0.2.tgz",
+      "integrity": "sha512-yarCIK2HcAOadqnKW419+FA38qpWDCKcOr5RZU+jnyLL/hn3No9BHZY+YJDEzvQ0k8Oyl7ffLjZv9ZUxvyKoLQ==",
+      "dev": true,
+      "dependencies": {
+        "bunker": "0.1.X"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
+      "dev": true
+    },
+    "node_modules/set-function-name": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
+      "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+      "dev": true,
+      "dependencies": {
+        "define-data-property": "^1.0.1",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true
+    },
+    "node_modules/slide": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
+      "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/smart-buffer": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6.0.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/sntp": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+      "integrity": "sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==",
+      "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.",
+      "dev": true,
+      "dependencies": {
+        "hoek": "2.x.x"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/socks": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+      "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+      "dev": true,
+      "dependencies": {
+        "ip": "^2.0.0",
+        "smart-buffer": "^4.2.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/socks-proxy-agent": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
+      "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
+      "dev": true,
+      "dependencies": {
+        "agent-base": "^6.0.2",
+        "debug": "^4.3.3",
+        "socks": "^2.6.2"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/sshpk": {
+      "version": "1.17.0",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+      "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+      "dev": true,
+      "dependencies": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      },
+      "bin": {
+        "sshpk-conv": "bin/sshpk-conv",
+        "sshpk-sign": "bin/sshpk-sign",
+        "sshpk-verify": "bin/sshpk-verify"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/sshpk/node_modules/assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/ssri": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+      "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+      "dev": true,
+      "dependencies": {
+        "minipass": "^3.1.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/stringstream": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
+      "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
+      "dev": true
+    },
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/tap": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/tap/-/tap-0.7.1.tgz",
+      "integrity": "sha512-Dh7fyYFJzj9VZP/Oa79kFWeq2KxPwjCNHNWc0mXJTqUq7PKLrhg7d/mR748Bty9TKHsbMxpFLHn1YJZVjxJaug==",
+      "dev": true,
+      "dependencies": {
+        "buffer-equal": "~0.0.0",
+        "deep-equal": "^1.0.0",
+        "difflet": "~0.2.0",
+        "glob": "^4.3.5",
+        "inherits": "*",
+        "mkdirp": "^0.5.0",
+        "nopt": "^3.0.1",
+        "runforcover": "~0.0.2",
+        "slide": "*",
+        "yamlish": "*"
+      },
+      "bin": {
+        "tap": "bin/tap.js"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/tap/node_modules/glob": {
+      "version": "4.5.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+      "integrity": "sha512-I0rTWUKSZKxPSIAIaqhSXTM/DiII6wame+rEC3cFA5Lqmr9YmdL7z6Hj9+bdWtTvoY1Su4/OiMLmb37Y7JzvJQ==",
+      "dev": true,
+      "dependencies": {
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^2.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/tap/node_modules/minimatch": {
+      "version": "2.0.10",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+      "integrity": "sha512-jQo6o1qSVLEWaw3l+bwYA2X0uLuK2KjNh2wjgO7Q/9UJnXr1Q3yQKR8BI0/Bt/rPg75e6SMW4hW/6cBHVTZUjA==",
+      "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/tap/node_modules/mkdirp": {
+      "version": "0.5.6",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      }
+    },
+    "node_modules/tap/node_modules/nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+      "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==",
+      "dev": true,
+      "dependencies": {
+        "abbrev": "1"
+      },
+      "bin": {
+        "nopt": "bin/nopt.js"
+      }
+    },
+    "node_modules/tar": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
+      "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
+      "dev": true,
+      "dependencies": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^5.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/tar/node_modules/minipass": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/tough-cookie": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+      "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+      "dev": true,
+      "dependencies": {
+        "punycode": "^1.4.1"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/traverse": {
+      "version": "0.6.7",
+      "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz",
+      "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tree-sitter-cli": {
+      "resolved": "node_modules/.pnpm/tree-sitter-cli@0.20.8/node_modules/tree-sitter-cli",
+      "link": true
+    },
+    "node_modules/tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+      "dev": true,
+      "dependencies": {
+        "safe-buffer": "^5.0.1"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+      "dev": true
+    },
+    "node_modules/uglify-js": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.1.1.tgz",
+      "integrity": "sha512-YYY9Dle1leC+btgrHnAR05eq0aRdcPJsXlYYD+SYw2lqc5HFuFNHg3wWEW4SNE0iXXEUl0fz43gTQ3r1YK76rg==",
+      "dev": true,
+      "bin": {
+        "uglifyjs": "bin/uglifyjs"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+      "dev": true,
+      "dependencies": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "node_modules/unique-slug": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+      "dev": true,
+      "dependencies": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "dev": true
+    },
+    "node_modules/uuid": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
+      "dev": true,
+      "bin": {
+        "uuid": "bin/uuid"
+      }
+    },
+    "node_modules/verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+      "dev": true,
+      "engines": [
+        "node >=0.6.0"
+      ],
+      "dependencies": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "node_modules/verror/node_modules/assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/verror/node_modules/core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+      "dev": true
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/wide-align": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+      "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+      "dev": true,
+      "dependencies": {
+        "string-width": "^1.0.2 || 2 || 3 || 4"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+      "dev": true
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/yamlish": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/yamlish/-/yamlish-0.0.7.tgz",
+      "integrity": "sha512-MfSpIJj5Hmm0Yz788MEW1NWfdOhZR/O0WPrdiUeWBKTtCNm0jZwMJZhScqveQoE6CvUoXOQBs5/1I/nC6Sbj/w==",
+      "dev": true
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644 (file)
index 0000000..4b48420
--- /dev/null
@@ -0,0 +1,36 @@
+{
+  "name": "tree-sitter-api-notation",
+  "version": "1.0.0",
+  "description": "API Notation grammar for tree-sitter",
+  "main": "bindings/node",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "keywords": ["parser", "api-notation"],
+  "author": "Ruben Beltran del Rio",
+  "license": "MIT",
+  "dependencies": {
+    "nan": "^2.18.0"
+  },
+  "devDependencies": {
+    "tree-sitter-cli": "^0.20.8"
+  },
+  "scripts": {
+    "build": "tree-sitter generate && node-gyp build",
+    "parse": "tree-sitter parse",
+    "test": "tree-sitter test"
+  },
+  "tree-sitter": [
+    {
+      "scope": "source.api-notation",
+      "file-types": [
+        "apinotation",
+        "api"
+      ],
+      "highlights": [
+        "queries/highlights.scm"
+      ],
+      "injection-regex": "^(apinotation|api-notation)$"
+    }
+  ]
+}
diff --git a/queries/highlights.scm b/queries/highlights.scm
new file mode 100644 (file)
index 0000000..9536ffd
--- /dev/null
@@ -0,0 +1,8 @@
+(type_annotation) @type
+(member_type) @operator
+(member) @property
+(parameter_list) @function
+(parameter_list (identifier) @parameter)
+(identifier) @keyword
+(throw_statement) @operator
+(return_statement) @operator
diff --git a/src/grammar.json b/src/grammar.json
new file mode 100644 (file)
index 0000000..1d2d121
--- /dev/null
@@ -0,0 +1,431 @@
+{
+  "name": "apinotation",
+  "rules": {
+    "source_file": {
+      "type": "REPEAT",
+      "content": {
+        "type": "SEQ",
+        "members": [
+          {
+            "type": "CHOICE",
+            "members": [
+              {
+                "type": "SYMBOL",
+                "name": "definition"
+              },
+              {
+                "type": "SYMBOL",
+                "name": "comment"
+              }
+            ]
+          },
+          {
+            "type": "REPEAT",
+            "content": {
+              "type": "SYMBOL",
+              "name": "_newline"
+            }
+          }
+        ]
+      }
+    },
+    "definition": {
+      "type": "PREC_RIGHT",
+      "value": 0,
+      "content": {
+        "type": "SEQ",
+        "members": [
+          {
+            "type": "SYMBOL",
+            "name": "entry"
+          },
+          {
+            "type": "SYMBOL",
+            "name": "_newline"
+          },
+          {
+            "type": "REPEAT",
+            "content": {
+              "type": "CHOICE",
+              "members": [
+                {
+                  "type": "SYMBOL",
+                  "name": "member"
+                },
+                {
+                  "type": "SYMBOL",
+                  "name": "comment"
+                }
+              ]
+            }
+          }
+        ]
+      }
+    },
+    "entry": {
+      "type": "PREC_RIGHT",
+      "value": 0,
+      "content": {
+        "type": "SEQ",
+        "members": [
+          {
+            "type": "SYMBOL",
+            "name": "identifier"
+          },
+          {
+            "type": "REPEAT",
+            "content": {
+              "type": "SEQ",
+              "members": [
+                {
+                  "type": "TOKEN",
+                  "content": {
+                    "type": "STRING",
+                    "value": "."
+                  }
+                },
+                {
+                  "type": "SYMBOL",
+                  "name": "identifier"
+                }
+              ]
+            }
+          }
+        ]
+      }
+    },
+    "member": {
+      "type": "SEQ",
+      "members": [
+        {
+          "type": "SYMBOL",
+          "name": "member_type"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "_label"
+        },
+        {
+          "type": "CHOICE",
+          "members": [
+            {
+              "type": "SYMBOL",
+              "name": "type_annotation"
+            },
+            {
+              "type": "BLANK"
+            }
+          ]
+        },
+        {
+          "type": "CHOICE",
+          "members": [
+            {
+              "type": "SYMBOL",
+              "name": "parameter_list"
+            },
+            {
+              "type": "BLANK"
+            }
+          ]
+        },
+        {
+          "type": "CHOICE",
+          "members": [
+            {
+              "type": "SYMBOL",
+              "name": "return_statement"
+            },
+            {
+              "type": "BLANK"
+            }
+          ]
+        },
+        {
+          "type": "CHOICE",
+          "members": [
+            {
+              "type": "SYMBOL",
+              "name": "throw_statement"
+            },
+            {
+              "type": "BLANK"
+            }
+          ]
+        },
+        {
+          "type": "SYMBOL",
+          "name": "_newline"
+        }
+      ]
+    },
+    "member_type": {
+      "type": "CHOICE",
+      "members": [
+        {
+          "type": "STRING",
+          "value": "::"
+        },
+        {
+          "type": "STRING",
+          "value": "->"
+        },
+        {
+          "type": "STRING",
+          "value": "<-"
+        },
+        {
+          "type": "STRING",
+          "value": "~>"
+        },
+        {
+          "type": "STRING",
+          "value": "<~"
+        },
+        {
+          "type": "STRING",
+          "value": "+>"
+        },
+        {
+          "type": "STRING",
+          "value": "<+"
+        },
+        {
+          "type": "STRING",
+          "value": "#"
+        },
+        {
+          "type": "STRING",
+          "value": "+"
+        },
+        {
+          "type": "STRING",
+          "value": "-"
+        }
+      ]
+    },
+    "parameter_list": {
+      "type": "SEQ",
+      "members": [
+        {
+          "type": "STRING",
+          "value": "("
+        },
+        {
+          "type": "CHOICE",
+          "members": [
+            {
+              "type": "SYMBOL",
+              "name": "_identifier_list"
+            },
+            {
+              "type": "BLANK"
+            }
+          ]
+        },
+        {
+          "type": "STRING",
+          "value": ")"
+        }
+      ]
+    },
+    "return_statement": {
+      "type": "SEQ",
+      "members": [
+        {
+          "type": "STRING",
+          "value": "=>"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "entry"
+        }
+      ]
+    },
+    "throw_statement": {
+      "type": "SEQ",
+      "members": [
+        {
+          "type": "STRING",
+          "value": "#>"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "_entry_list"
+        }
+      ]
+    },
+    "_entry_list": {
+      "type": "PREC_LEFT",
+      "value": 0,
+      "content": {
+        "type": "SEQ",
+        "members": [
+          {
+            "type": "SYMBOL",
+            "name": "entry"
+          },
+          {
+            "type": "REPEAT",
+            "content": {
+              "type": "SEQ",
+              "members": [
+                {
+                  "type": "STRING",
+                  "value": ","
+                },
+                {
+                  "type": "SYMBOL",
+                  "name": "entry"
+                }
+              ]
+            }
+          }
+        ]
+      }
+    },
+    "_identifier_list": {
+      "type": "SEQ",
+      "members": [
+        {
+          "type": "SYMBOL",
+          "name": "identifier"
+        },
+        {
+          "type": "REPEAT",
+          "content": {
+            "type": "SEQ",
+            "members": [
+              {
+                "type": "STRING",
+                "value": ","
+              },
+              {
+                "type": "SYMBOL",
+                "name": "identifier"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    "identifier": {
+      "type": "PREC_LEFT",
+      "value": 0,
+      "content": {
+        "type": "SEQ",
+        "members": [
+          {
+            "type": "SYMBOL",
+            "name": "_label"
+          },
+          {
+            "type": "CHOICE",
+            "members": [
+              {
+                "type": "SYMBOL",
+                "name": "type_annotation"
+              },
+              {
+                "type": "BLANK"
+              }
+            ]
+          },
+          {
+            "type": "CHOICE",
+            "members": [
+              {
+                "type": "SYMBOL",
+                "name": "parameter_list"
+              },
+              {
+                "type": "BLANK"
+              }
+            ]
+          },
+          {
+            "type": "CHOICE",
+            "members": [
+              {
+                "type": "SYMBOL",
+                "name": "return_statement"
+              },
+              {
+                "type": "BLANK"
+              }
+            ]
+          },
+          {
+            "type": "CHOICE",
+            "members": [
+              {
+                "type": "SYMBOL",
+                "name": "throw_statement"
+              },
+              {
+                "type": "BLANK"
+              }
+            ]
+          }
+        ]
+      }
+    },
+    "type_annotation": {
+      "type": "SEQ",
+      "members": [
+        {
+          "type": "STRING",
+          "value": "<"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "_entry_list"
+        },
+        {
+          "type": "STRING",
+          "value": ">"
+        }
+      ]
+    },
+    "comment": {
+      "type": "SEQ",
+      "members": [
+        {
+          "type": "STRING",
+          "value": "//"
+        },
+        {
+          "type": "PATTERN",
+          "value": "[^\\n]*"
+        },
+        {
+          "type": "SYMBOL",
+          "name": "_newline"
+        }
+      ]
+    },
+    "_label": {
+      "type": "PATTERN",
+      "value": "[a-zA-Z0-9][a-zA-Z0-9_-]*"
+    },
+    "_newline": {
+      "type": "TOKEN",
+      "content": {
+        "type": "STRING",
+        "value": "\n"
+      }
+    }
+  },
+  "extras": [
+    {
+      "type": "PATTERN",
+      "value": "\\s"
+    }
+  ],
+  "conflicts": [],
+  "precedences": [],
+  "externals": [],
+  "inline": [],
+  "supertypes": []
+}
+
diff --git a/src/node-types.json b/src/node-types.json
new file mode 100644 (file)
index 0000000..95b68ab
--- /dev/null
@@ -0,0 +1,263 @@
+[
+  {
+    "type": "comment",
+    "named": true,
+    "fields": {}
+  },
+  {
+    "type": "definition",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": true,
+      "required": true,
+      "types": [
+        {
+          "type": "comment",
+          "named": true
+        },
+        {
+          "type": "entry",
+          "named": true
+        },
+        {
+          "type": "member",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "entry",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": true,
+      "required": true,
+      "types": [
+        {
+          "type": "identifier",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "identifier",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": true,
+      "required": false,
+      "types": [
+        {
+          "type": "parameter_list",
+          "named": true
+        },
+        {
+          "type": "return_statement",
+          "named": true
+        },
+        {
+          "type": "throw_statement",
+          "named": true
+        },
+        {
+          "type": "type_annotation",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "member",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": true,
+      "required": true,
+      "types": [
+        {
+          "type": "member_type",
+          "named": true
+        },
+        {
+          "type": "parameter_list",
+          "named": true
+        },
+        {
+          "type": "return_statement",
+          "named": true
+        },
+        {
+          "type": "throw_statement",
+          "named": true
+        },
+        {
+          "type": "type_annotation",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "member_type",
+    "named": true,
+    "fields": {}
+  },
+  {
+    "type": "parameter_list",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": true,
+      "required": false,
+      "types": [
+        {
+          "type": "identifier",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "return_statement",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": false,
+      "required": true,
+      "types": [
+        {
+          "type": "entry",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "source_file",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": true,
+      "required": false,
+      "types": [
+        {
+          "type": "comment",
+          "named": true
+        },
+        {
+          "type": "definition",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "throw_statement",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": true,
+      "required": true,
+      "types": [
+        {
+          "type": "entry",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "type_annotation",
+    "named": true,
+    "fields": {},
+    "children": {
+      "multiple": true,
+      "required": true,
+      "types": [
+        {
+          "type": "entry",
+          "named": true
+        }
+      ]
+    }
+  },
+  {
+    "type": "#",
+    "named": false
+  },
+  {
+    "type": "#>",
+    "named": false
+  },
+  {
+    "type": "(",
+    "named": false
+  },
+  {
+    "type": ")",
+    "named": false
+  },
+  {
+    "type": "+",
+    "named": false
+  },
+  {
+    "type": "+>",
+    "named": false
+  },
+  {
+    "type": ",",
+    "named": false
+  },
+  {
+    "type": "-",
+    "named": false
+  },
+  {
+    "type": "->",
+    "named": false
+  },
+  {
+    "type": ".",
+    "named": false
+  },
+  {
+    "type": "//",
+    "named": false
+  },
+  {
+    "type": "::",
+    "named": false
+  },
+  {
+    "type": "<",
+    "named": false
+  },
+  {
+    "type": "<+",
+    "named": false
+  },
+  {
+    "type": "<-",
+    "named": false
+  },
+  {
+    "type": "<~",
+    "named": false
+  },
+  {
+    "type": "=>",
+    "named": false
+  },
+  {
+    "type": ">",
+    "named": false
+  },
+  {
+    "type": "~>",
+    "named": false
+  }
+]
\ No newline at end of file
diff --git a/src/parser.c b/src/parser.c
new file mode 100644 (file)
index 0000000..aae9ba2
--- /dev/null
@@ -0,0 +1,2579 @@
+#include <tree_sitter/parser.h>
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
+
+#define LANGUAGE_VERSION 14
+#define STATE_COUNT 146
+#define LARGE_STATE_COUNT 2
+#define SYMBOL_COUNT 42
+#define ALIAS_COUNT 0
+#define TOKEN_COUNT 23
+#define EXTERNAL_TOKEN_COUNT 0
+#define FIELD_COUNT 0
+#define MAX_ALIAS_SEQUENCE_LENGTH 7
+#define PRODUCTION_ID_COUNT 1
+
+enum {
+  anon_sym_DOT = 1,
+  anon_sym_COLON_COLON = 2,
+  anon_sym_DASH_GT = 3,
+  anon_sym_LT_DASH = 4,
+  anon_sym_TILDE_GT = 5,
+  anon_sym_LT_TILDE = 6,
+  anon_sym_PLUS_GT = 7,
+  anon_sym_LT_PLUS = 8,
+  anon_sym_POUND = 9,
+  anon_sym_PLUS = 10,
+  anon_sym_DASH = 11,
+  anon_sym_LPAREN = 12,
+  anon_sym_RPAREN = 13,
+  anon_sym_EQ_GT = 14,
+  anon_sym_POUND_GT = 15,
+  anon_sym_COMMA = 16,
+  anon_sym_LT = 17,
+  anon_sym_GT = 18,
+  anon_sym_SLASH_SLASH = 19,
+  aux_sym_comment_token1 = 20,
+  sym__label = 21,
+  sym__newline = 22,
+  sym_source_file = 23,
+  sym_definition = 24,
+  sym_entry = 25,
+  sym_member = 26,
+  sym_member_type = 27,
+  sym_parameter_list = 28,
+  sym_return_statement = 29,
+  sym_throw_statement = 30,
+  sym__entry_list = 31,
+  sym__identifier_list = 32,
+  sym_identifier = 33,
+  sym_type_annotation = 34,
+  sym_comment = 35,
+  aux_sym_source_file_repeat1 = 36,
+  aux_sym_source_file_repeat2 = 37,
+  aux_sym_definition_repeat1 = 38,
+  aux_sym_entry_repeat1 = 39,
+  aux_sym__entry_list_repeat1 = 40,
+  aux_sym__identifier_list_repeat1 = 41,
+};
+
+static const char * const ts_symbol_names[] = {
+  [ts_builtin_sym_end] = "end",
+  [anon_sym_DOT] = ".",
+  [anon_sym_COLON_COLON] = "::",
+  [anon_sym_DASH_GT] = "->",
+  [anon_sym_LT_DASH] = "<-",
+  [anon_sym_TILDE_GT] = "~>",
+  [anon_sym_LT_TILDE] = "<~",
+  [anon_sym_PLUS_GT] = "+>",
+  [anon_sym_LT_PLUS] = "<+",
+  [anon_sym_POUND] = "#",
+  [anon_sym_PLUS] = "+",
+  [anon_sym_DASH] = "-",
+  [anon_sym_LPAREN] = "(",
+  [anon_sym_RPAREN] = ")",
+  [anon_sym_EQ_GT] = "=>",
+  [anon_sym_POUND_GT] = "#>",
+  [anon_sym_COMMA] = ",",
+  [anon_sym_LT] = "<",
+  [anon_sym_GT] = ">",
+  [anon_sym_SLASH_SLASH] = "//",
+  [aux_sym_comment_token1] = "comment_token1",
+  [sym__label] = "_label",
+  [sym__newline] = "_newline",
+  [sym_source_file] = "source_file",
+  [sym_definition] = "definition",
+  [sym_entry] = "entry",
+  [sym_member] = "member",
+  [sym_member_type] = "member_type",
+  [sym_parameter_list] = "parameter_list",
+  [sym_return_statement] = "return_statement",
+  [sym_throw_statement] = "throw_statement",
+  [sym__entry_list] = "_entry_list",
+  [sym__identifier_list] = "_identifier_list",
+  [sym_identifier] = "identifier",
+  [sym_type_annotation] = "type_annotation",
+  [sym_comment] = "comment",
+  [aux_sym_source_file_repeat1] = "source_file_repeat1",
+  [aux_sym_source_file_repeat2] = "source_file_repeat2",
+  [aux_sym_definition_repeat1] = "definition_repeat1",
+  [aux_sym_entry_repeat1] = "entry_repeat1",
+  [aux_sym__entry_list_repeat1] = "_entry_list_repeat1",
+  [aux_sym__identifier_list_repeat1] = "_identifier_list_repeat1",
+};
+
+static const TSSymbol ts_symbol_map[] = {
+  [ts_builtin_sym_end] = ts_builtin_sym_end,
+  [anon_sym_DOT] = anon_sym_DOT,
+  [anon_sym_COLON_COLON] = anon_sym_COLON_COLON,
+  [anon_sym_DASH_GT] = anon_sym_DASH_GT,
+  [anon_sym_LT_DASH] = anon_sym_LT_DASH,
+  [anon_sym_TILDE_GT] = anon_sym_TILDE_GT,
+  [anon_sym_LT_TILDE] = anon_sym_LT_TILDE,
+  [anon_sym_PLUS_GT] = anon_sym_PLUS_GT,
+  [anon_sym_LT_PLUS] = anon_sym_LT_PLUS,
+  [anon_sym_POUND] = anon_sym_POUND,
+  [anon_sym_PLUS] = anon_sym_PLUS,
+  [anon_sym_DASH] = anon_sym_DASH,
+  [anon_sym_LPAREN] = anon_sym_LPAREN,
+  [anon_sym_RPAREN] = anon_sym_RPAREN,
+  [anon_sym_EQ_GT] = anon_sym_EQ_GT,
+  [anon_sym_POUND_GT] = anon_sym_POUND_GT,
+  [anon_sym_COMMA] = anon_sym_COMMA,
+  [anon_sym_LT] = anon_sym_LT,
+  [anon_sym_GT] = anon_sym_GT,
+  [anon_sym_SLASH_SLASH] = anon_sym_SLASH_SLASH,
+  [aux_sym_comment_token1] = aux_sym_comment_token1,
+  [sym__label] = sym__label,
+  [sym__newline] = sym__newline,
+  [sym_source_file] = sym_source_file,
+  [sym_definition] = sym_definition,
+  [sym_entry] = sym_entry,
+  [sym_member] = sym_member,
+  [sym_member_type] = sym_member_type,
+  [sym_parameter_list] = sym_parameter_list,
+  [sym_return_statement] = sym_return_statement,
+  [sym_throw_statement] = sym_throw_statement,
+  [sym__entry_list] = sym__entry_list,
+  [sym__identifier_list] = sym__identifier_list,
+  [sym_identifier] = sym_identifier,
+  [sym_type_annotation] = sym_type_annotation,
+  [sym_comment] = sym_comment,
+  [aux_sym_source_file_repeat1] = aux_sym_source_file_repeat1,
+  [aux_sym_source_file_repeat2] = aux_sym_source_file_repeat2,
+  [aux_sym_definition_repeat1] = aux_sym_definition_repeat1,
+  [aux_sym_entry_repeat1] = aux_sym_entry_repeat1,
+  [aux_sym__entry_list_repeat1] = aux_sym__entry_list_repeat1,
+  [aux_sym__identifier_list_repeat1] = aux_sym__identifier_list_repeat1,
+};
+
+static const TSSymbolMetadata ts_symbol_metadata[] = {
+  [ts_builtin_sym_end] = {
+    .visible = false,
+    .named = true,
+  },
+  [anon_sym_DOT] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_COLON_COLON] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_DASH_GT] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_LT_DASH] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_TILDE_GT] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_LT_TILDE] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_PLUS_GT] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_LT_PLUS] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_POUND] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_PLUS] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_DASH] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_LPAREN] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_RPAREN] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_EQ_GT] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_POUND_GT] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_COMMA] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_LT] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_GT] = {
+    .visible = true,
+    .named = false,
+  },
+  [anon_sym_SLASH_SLASH] = {
+    .visible = true,
+    .named = false,
+  },
+  [aux_sym_comment_token1] = {
+    .visible = false,
+    .named = false,
+  },
+  [sym__label] = {
+    .visible = false,
+    .named = true,
+  },
+  [sym__newline] = {
+    .visible = false,
+    .named = true,
+  },
+  [sym_source_file] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_definition] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_entry] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_member] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_member_type] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_parameter_list] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_return_statement] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_throw_statement] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym__entry_list] = {
+    .visible = false,
+    .named = true,
+  },
+  [sym__identifier_list] = {
+    .visible = false,
+    .named = true,
+  },
+  [sym_identifier] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_type_annotation] = {
+    .visible = true,
+    .named = true,
+  },
+  [sym_comment] = {
+    .visible = true,
+    .named = true,
+  },
+  [aux_sym_source_file_repeat1] = {
+    .visible = false,
+    .named = false,
+  },
+  [aux_sym_source_file_repeat2] = {
+    .visible = false,
+    .named = false,
+  },
+  [aux_sym_definition_repeat1] = {
+    .visible = false,
+    .named = false,
+  },
+  [aux_sym_entry_repeat1] = {
+    .visible = false,
+    .named = false,
+  },
+  [aux_sym__entry_list_repeat1] = {
+    .visible = false,
+    .named = false,
+  },
+  [aux_sym__identifier_list_repeat1] = {
+    .visible = false,
+    .named = false,
+  },
+};
+
+static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = {
+  [0] = {0},
+};
+
+static const uint16_t ts_non_terminal_alias_map[] = {
+  0,
+};
+
+static const TSStateId ts_primary_state_ids[STATE_COUNT] = {
+  [0] = 0,
+  [1] = 1,
+  [2] = 2,
+  [3] = 3,
+  [4] = 4,
+  [5] = 5,
+  [6] = 6,
+  [7] = 7,
+  [8] = 8,
+  [9] = 9,
+  [10] = 10,
+  [11] = 11,
+  [12] = 11,
+  [13] = 11,
+  [14] = 11,
+  [15] = 15,
+  [16] = 15,
+  [17] = 11,
+  [18] = 18,
+  [19] = 15,
+  [20] = 15,
+  [21] = 21,
+  [22] = 22,
+  [23] = 23,
+  [24] = 15,
+  [25] = 25,
+  [26] = 25,
+  [27] = 23,
+  [28] = 25,
+  [29] = 25,
+  [30] = 30,
+  [31] = 23,
+  [32] = 32,
+  [33] = 23,
+  [34] = 34,
+  [35] = 35,
+  [36] = 36,
+  [37] = 37,
+  [38] = 25,
+  [39] = 39,
+  [40] = 34,
+  [41] = 41,
+  [42] = 39,
+  [43] = 43,
+  [44] = 35,
+  [45] = 32,
+  [46] = 23,
+  [47] = 47,
+  [48] = 48,
+  [49] = 49,
+  [50] = 34,
+  [51] = 48,
+  [52] = 41,
+  [53] = 53,
+  [54] = 34,
+  [55] = 35,
+  [56] = 56,
+  [57] = 39,
+  [58] = 49,
+  [59] = 41,
+  [60] = 60,
+  [61] = 36,
+  [62] = 62,
+  [63] = 48,
+  [64] = 41,
+  [65] = 47,
+  [66] = 35,
+  [67] = 67,
+  [68] = 43,
+  [69] = 39,
+  [70] = 70,
+  [71] = 49,
+  [72] = 72,
+  [73] = 73,
+  [74] = 37,
+  [75] = 75,
+  [76] = 76,
+  [77] = 47,
+  [78] = 43,
+  [79] = 79,
+  [80] = 80,
+  [81] = 81,
+  [82] = 82,
+  [83] = 82,
+  [84] = 80,
+  [85] = 49,
+  [86] = 86,
+  [87] = 47,
+  [88] = 76,
+  [89] = 73,
+  [90] = 43,
+  [91] = 91,
+  [92] = 41,
+  [93] = 93,
+  [94] = 72,
+  [95] = 35,
+  [96] = 48,
+  [97] = 91,
+  [98] = 93,
+  [99] = 41,
+  [100] = 56,
+  [101] = 81,
+  [102] = 39,
+  [103] = 75,
+  [104] = 70,
+  [105] = 34,
+  [106] = 93,
+  [107] = 86,
+  [108] = 108,
+  [109] = 109,
+  [110] = 110,
+  [111] = 111,
+  [112] = 43,
+  [113] = 113,
+  [114] = 114,
+  [115] = 49,
+  [116] = 116,
+  [117] = 113,
+  [118] = 113,
+  [119] = 119,
+  [120] = 41,
+  [121] = 114,
+  [122] = 113,
+  [123] = 56,
+  [124] = 47,
+  [125] = 125,
+  [126] = 126,
+  [127] = 127,
+  [128] = 126,
+  [129] = 126,
+  [130] = 126,
+  [131] = 126,
+  [132] = 132,
+  [133] = 133,
+  [134] = 134,
+  [135] = 133,
+  [136] = 136,
+  [137] = 137,
+  [138] = 138,
+  [139] = 139,
+  [140] = 140,
+  [141] = 141,
+  [142] = 142,
+  [143] = 136,
+  [144] = 144,
+  [145] = 145,
+};
+
+static bool ts_lex(TSLexer *lexer, TSStateId state) {
+  START_LEXER();
+  eof = lexer->eof(lexer);
+  switch (state) {
+    case 0:
+      if (eof) ADVANCE(10);
+      if (lookahead == '#') ADVANCE(20);
+      if (lookahead == '(') ADVANCE(23);
+      if (lookahead == ')') ADVANCE(24);
+      if (lookahead == '+') ADVANCE(21);
+      if (lookahead == ',') ADVANCE(27);
+      if (lookahead == '-') ADVANCE(22);
+      if (lookahead == '.') ADVANCE(11);
+      if (lookahead == '/') ADVANCE(4);
+      if (lookahead == ':') ADVANCE(5);
+      if (lookahead == '<') ADVANCE(29);
+      if (lookahead == '=') ADVANCE(7);
+      if (lookahead == '>') ADVANCE(30);
+      if (lookahead == '~') ADVANCE(8);
+      if (lookahead == '\t' ||
+          lookahead == '\n' ||
+          lookahead == '\r' ||
+          lookahead == ' ') SKIP(0)
+      if (('0' <= lookahead && lookahead <= '9') ||
+          ('A' <= lookahead && lookahead <= 'Z') ||
+          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34);
+      END_STATE();
+    case 1:
+      if (lookahead == '\n') ADVANCE(35);
+      if (lookahead == '#') ADVANCE(6);
+      if (lookahead == '(') ADVANCE(23);
+      if (lookahead == ',') ADVANCE(27);
+      if (lookahead == '.') ADVANCE(11);
+      if (lookahead == '<') ADVANCE(28);
+      if (lookahead == '=') ADVANCE(7);
+      if (lookahead == '\t' ||
+          lookahead == '\r' ||
+          lookahead == ' ') SKIP(1)
+      END_STATE();
+    case 2:
+      if (lookahead == '#') ADVANCE(6);
+      if (lookahead == '(') ADVANCE(23);
+      if (lookahead == ')') ADVANCE(24);
+      if (lookahead == ',') ADVANCE(27);
+      if (lookahead == '.') ADVANCE(11);
+      if (lookahead == '<') ADVANCE(28);
+      if (lookahead == '=') ADVANCE(7);
+      if (lookahead == '>') ADVANCE(30);
+      if (lookahead == '\t' ||
+          lookahead == '\n' ||
+          lookahead == '\r' ||
+          lookahead == ' ') SKIP(2)
+      END_STATE();
+    case 3:
+      if (lookahead == '+') ADVANCE(18);
+      if (lookahead == '-') ADVANCE(14);
+      if (lookahead == '~') ADVANCE(16);
+      END_STATE();
+    case 4:
+      if (lookahead == '/') ADVANCE(31);
+      END_STATE();
+    case 5:
+      if (lookahead == ':') ADVANCE(12);
+      END_STATE();
+    case 6:
+      if (lookahead == '>') ADVANCE(26);
+      END_STATE();
+    case 7:
+      if (lookahead == '>') ADVANCE(25);
+      END_STATE();
+    case 8:
+      if (lookahead == '>') ADVANCE(15);
+      END_STATE();
+    case 9:
+      if (eof) ADVANCE(10);
+      if (lookahead == '\n') ADVANCE(35);
+      if (lookahead == '#') ADVANCE(19);
+      if (lookahead == '+') ADVANCE(21);
+      if (lookahead == ',') ADVANCE(27);
+      if (lookahead == '-') ADVANCE(22);
+      if (lookahead == '.') ADVANCE(11);
+      if (lookahead == '/') ADVANCE(4);
+      if (lookahead == ':') ADVANCE(5);
+      if (lookahead == '<') ADVANCE(3);
+      if (lookahead == '~') ADVANCE(8);
+      if (lookahead == '\t' ||
+          lookahead == '\r' ||
+          lookahead == ' ') SKIP(9)
+      if (('0' <= lookahead && lookahead <= '9') ||
+          ('A' <= lookahead && lookahead <= 'Z') ||
+          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34);
+      END_STATE();
+    case 10:
+      ACCEPT_TOKEN(ts_builtin_sym_end);
+      END_STATE();
+    case 11:
+      ACCEPT_TOKEN(anon_sym_DOT);
+      END_STATE();
+    case 12:
+      ACCEPT_TOKEN(anon_sym_COLON_COLON);
+      END_STATE();
+    case 13:
+      ACCEPT_TOKEN(anon_sym_DASH_GT);
+      END_STATE();
+    case 14:
+      ACCEPT_TOKEN(anon_sym_LT_DASH);
+      END_STATE();
+    case 15:
+      ACCEPT_TOKEN(anon_sym_TILDE_GT);
+      END_STATE();
+    case 16:
+      ACCEPT_TOKEN(anon_sym_LT_TILDE);
+      END_STATE();
+    case 17:
+      ACCEPT_TOKEN(anon_sym_PLUS_GT);
+      END_STATE();
+    case 18:
+      ACCEPT_TOKEN(anon_sym_LT_PLUS);
+      END_STATE();
+    case 19:
+      ACCEPT_TOKEN(anon_sym_POUND);
+      END_STATE();
+    case 20:
+      ACCEPT_TOKEN(anon_sym_POUND);
+      if (lookahead == '>') ADVANCE(26);
+      END_STATE();
+    case 21:
+      ACCEPT_TOKEN(anon_sym_PLUS);
+      if (lookahead == '>') ADVANCE(17);
+      END_STATE();
+    case 22:
+      ACCEPT_TOKEN(anon_sym_DASH);
+      if (lookahead == '>') ADVANCE(13);
+      END_STATE();
+    case 23:
+      ACCEPT_TOKEN(anon_sym_LPAREN);
+      END_STATE();
+    case 24:
+      ACCEPT_TOKEN(anon_sym_RPAREN);
+      END_STATE();
+    case 25:
+      ACCEPT_TOKEN(anon_sym_EQ_GT);
+      END_STATE();
+    case 26:
+      ACCEPT_TOKEN(anon_sym_POUND_GT);
+      END_STATE();
+    case 27:
+      ACCEPT_TOKEN(anon_sym_COMMA);
+      END_STATE();
+    case 28:
+      ACCEPT_TOKEN(anon_sym_LT);
+      END_STATE();
+    case 29:
+      ACCEPT_TOKEN(anon_sym_LT);
+      if (lookahead == '+') ADVANCE(18);
+      if (lookahead == '-') ADVANCE(14);
+      if (lookahead == '~') ADVANCE(16);
+      END_STATE();
+    case 30:
+      ACCEPT_TOKEN(anon_sym_GT);
+      END_STATE();
+    case 31:
+      ACCEPT_TOKEN(anon_sym_SLASH_SLASH);
+      END_STATE();
+    case 32:
+      ACCEPT_TOKEN(aux_sym_comment_token1);
+      if (lookahead == '\t' ||
+          lookahead == '\r' ||
+          lookahead == ' ') ADVANCE(32);
+      if (lookahead != 0 &&
+          lookahead != '\n') ADVANCE(33);
+      END_STATE();
+    case 33:
+      ACCEPT_TOKEN(aux_sym_comment_token1);
+      if (lookahead != 0 &&
+          lookahead != '\n') ADVANCE(33);
+      END_STATE();
+    case 34:
+      ACCEPT_TOKEN(sym__label);
+      if (lookahead == '-' ||
+          ('0' <= lookahead && lookahead <= '9') ||
+          ('A' <= lookahead && lookahead <= 'Z') ||
+          lookahead == '_' ||
+          ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34);
+      END_STATE();
+    case 35:
+      ACCEPT_TOKEN(sym__newline);
+      if (lookahead == '\n') ADVANCE(35);
+      END_STATE();
+    default:
+      return false;
+  }
+}
+
+static const TSLexMode ts_lex_modes[STATE_COUNT] = {
+  [0] = {.lex_state = 0},
+  [1] = {.lex_state = 0},
+  [2] = {.lex_state = 9},
+  [3] = {.lex_state = 9},
+  [4] = {.lex_state = 9},
+  [5] = {.lex_state = 9},
+  [6] = {.lex_state = 9},
+  [7] = {.lex_state = 9},
+  [8] = {.lex_state = 9},
+  [9] = {.lex_state = 9},
+  [10] = {.lex_state = 9},
+  [11] = {.lex_state = 2},
+  [12] = {.lex_state = 2},
+  [13] = {.lex_state = 1},
+  [14] = {.lex_state = 1},
+  [15] = {.lex_state = 2},
+  [16] = {.lex_state = 2},
+  [17] = {.lex_state = 1},
+  [18] = {.lex_state = 1},
+  [19] = {.lex_state = 1},
+  [20] = {.lex_state = 1},
+  [21] = {.lex_state = 0},
+  [22] = {.lex_state = 0},
+  [23] = {.lex_state = 2},
+  [24] = {.lex_state = 1},
+  [25] = {.lex_state = 2},
+  [26] = {.lex_state = 2},
+  [27] = {.lex_state = 2},
+  [28] = {.lex_state = 1},
+  [29] = {.lex_state = 1},
+  [30] = {.lex_state = 1},
+  [31] = {.lex_state = 1},
+  [32] = {.lex_state = 2},
+  [33] = {.lex_state = 1},
+  [34] = {.lex_state = 2},
+  [35] = {.lex_state = 2},
+  [36] = {.lex_state = 2},
+  [37] = {.lex_state = 2},
+  [38] = {.lex_state = 1},
+  [39] = {.lex_state = 2},
+  [40] = {.lex_state = 2},
+  [41] = {.lex_state = 2},
+  [42] = {.lex_state = 2},
+  [43] = {.lex_state = 2},
+  [44] = {.lex_state = 2},
+  [45] = {.lex_state = 1},
+  [46] = {.lex_state = 1},
+  [47] = {.lex_state = 2},
+  [48] = {.lex_state = 2},
+  [49] = {.lex_state = 2},
+  [50] = {.lex_state = 1},
+  [51] = {.lex_state = 0},
+  [52] = {.lex_state = 1},
+  [53] = {.lex_state = 9},
+  [54] = {.lex_state = 1},
+  [55] = {.lex_state = 1},
+  [56] = {.lex_state = 1},
+  [57] = {.lex_state = 1},
+  [58] = {.lex_state = 1},
+  [59] = {.lex_state = 1},
+  [60] = {.lex_state = 9},
+  [61] = {.lex_state = 1},
+  [62] = {.lex_state = 1},
+  [63] = {.lex_state = 1},
+  [64] = {.lex_state = 0},
+  [65] = {.lex_state = 0},
+  [66] = {.lex_state = 1},
+  [67] = {.lex_state = 1},
+  [68] = {.lex_state = 0},
+  [69] = {.lex_state = 1},
+  [70] = {.lex_state = 2},
+  [71] = {.lex_state = 0},
+  [72] = {.lex_state = 2},
+  [73] = {.lex_state = 2},
+  [74] = {.lex_state = 1},
+  [75] = {.lex_state = 2},
+  [76] = {.lex_state = 2},
+  [77] = {.lex_state = 1},
+  [78] = {.lex_state = 1},
+  [79] = {.lex_state = 9},
+  [80] = {.lex_state = 2},
+  [81] = {.lex_state = 2},
+  [82] = {.lex_state = 2},
+  [83] = {.lex_state = 1},
+  [84] = {.lex_state = 1},
+  [85] = {.lex_state = 9},
+  [86] = {.lex_state = 0},
+  [87] = {.lex_state = 9},
+  [88] = {.lex_state = 1},
+  [89] = {.lex_state = 1},
+  [90] = {.lex_state = 9},
+  [91] = {.lex_state = 0},
+  [92] = {.lex_state = 9},
+  [93] = {.lex_state = 0},
+  [94] = {.lex_state = 1},
+  [95] = {.lex_state = 1},
+  [96] = {.lex_state = 9},
+  [97] = {.lex_state = 0},
+  [98] = {.lex_state = 0},
+  [99] = {.lex_state = 9},
+  [100] = {.lex_state = 9},
+  [101] = {.lex_state = 1},
+  [102] = {.lex_state = 1},
+  [103] = {.lex_state = 1},
+  [104] = {.lex_state = 1},
+  [105] = {.lex_state = 1},
+  [106] = {.lex_state = 0},
+  [107] = {.lex_state = 0},
+  [108] = {.lex_state = 0},
+  [109] = {.lex_state = 0},
+  [110] = {.lex_state = 1},
+  [111] = {.lex_state = 1},
+  [112] = {.lex_state = 9},
+  [113] = {.lex_state = 0},
+  [114] = {.lex_state = 0},
+  [115] = {.lex_state = 9},
+  [116] = {.lex_state = 1},
+  [117] = {.lex_state = 0},
+  [118] = {.lex_state = 0},
+  [119] = {.lex_state = 0},
+  [120] = {.lex_state = 0},
+  [121] = {.lex_state = 0},
+  [122] = {.lex_state = 0},
+  [123] = {.lex_state = 0},
+  [124] = {.lex_state = 9},
+  [125] = {.lex_state = 0},
+  [126] = {.lex_state = 0},
+  [127] = {.lex_state = 0},
+  [128] = {.lex_state = 0},
+  [129] = {.lex_state = 0},
+  [130] = {.lex_state = 0},
+  [131] = {.lex_state = 0},
+  [132] = {.lex_state = 32},
+  [133] = {.lex_state = 0},
+  [134] = {.lex_state = 9},
+  [135] = {.lex_state = 0},
+  [136] = {.lex_state = 0},
+  [137] = {.lex_state = 9},
+  [138] = {.lex_state = 9},
+  [139] = {.lex_state = 9},
+  [140] = {.lex_state = 9},
+  [141] = {.lex_state = 9},
+  [142] = {.lex_state = 0},
+  [143] = {.lex_state = 0},
+  [144] = {.lex_state = 0},
+  [145] = {.lex_state = 0},
+};
+
+static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
+  [0] = {
+    [ts_builtin_sym_end] = ACTIONS(1),
+    [anon_sym_DOT] = ACTIONS(1),
+    [anon_sym_COLON_COLON] = ACTIONS(1),
+    [anon_sym_DASH_GT] = ACTIONS(1),
+    [anon_sym_LT_DASH] = ACTIONS(1),
+    [anon_sym_TILDE_GT] = ACTIONS(1),
+    [anon_sym_LT_TILDE] = ACTIONS(1),
+    [anon_sym_PLUS_GT] = ACTIONS(1),
+    [anon_sym_LT_PLUS] = ACTIONS(1),
+    [anon_sym_POUND] = ACTIONS(1),
+    [anon_sym_PLUS] = ACTIONS(1),
+    [anon_sym_DASH] = ACTIONS(1),
+    [anon_sym_LPAREN] = ACTIONS(1),
+    [anon_sym_RPAREN] = ACTIONS(1),
+    [anon_sym_EQ_GT] = ACTIONS(1),
+    [anon_sym_POUND_GT] = ACTIONS(1),
+    [anon_sym_COMMA] = ACTIONS(1),
+    [anon_sym_LT] = ACTIONS(1),
+    [anon_sym_GT] = ACTIONS(1),
+    [anon_sym_SLASH_SLASH] = ACTIONS(1),
+    [sym__label] = ACTIONS(1),
+  },
+  [1] = {
+    [sym_source_file] = STATE(142),
+    [sym_definition] = STATE(53),
+    [sym_entry] = STATE(140),
+    [sym_identifier] = STATE(115),
+    [sym_comment] = STATE(53),
+    [aux_sym_source_file_repeat2] = STATE(21),
+    [ts_builtin_sym_end] = ACTIONS(3),
+    [anon_sym_SLASH_SLASH] = ACTIONS(5),
+    [sym__label] = ACTIONS(7),
+  },
+};
+
+static const uint16_t ts_small_parse_table[] = {
+  [0] = 6,
+    ACTIONS(13), 1,
+      anon_sym_SLASH_SLASH,
+    ACTIONS(15), 1,
+      sym__label,
+    STATE(145), 1,
+      sym_member_type,
+    ACTIONS(9), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    STATE(4), 3,
+      sym_member,
+      sym_comment,
+      aux_sym_definition_repeat1,
+    ACTIONS(11), 10,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+  [31] = 6,
+    ACTIONS(13), 1,
+      anon_sym_SLASH_SLASH,
+    ACTIONS(19), 1,
+      sym__label,
+    STATE(145), 1,
+      sym_member_type,
+    ACTIONS(17), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    STATE(2), 3,
+      sym_member,
+      sym_comment,
+      aux_sym_definition_repeat1,
+    ACTIONS(11), 10,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+  [62] = 6,
+    ACTIONS(26), 1,
+      anon_sym_SLASH_SLASH,
+    ACTIONS(29), 1,
+      sym__label,
+    STATE(145), 1,
+      sym_member_type,
+    ACTIONS(21), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    STATE(4), 3,
+      sym_member,
+      sym_comment,
+      aux_sym_definition_repeat1,
+    ACTIONS(23), 10,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+  [93] = 2,
+    ACTIONS(31), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    ACTIONS(33), 12,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [112] = 2,
+    ACTIONS(35), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    ACTIONS(37), 12,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [131] = 2,
+    ACTIONS(39), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    ACTIONS(41), 12,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [150] = 2,
+    ACTIONS(43), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    ACTIONS(45), 12,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [169] = 2,
+    ACTIONS(47), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    ACTIONS(49), 12,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [188] = 2,
+    ACTIONS(51), 2,
+      ts_builtin_sym_end,
+      sym__newline,
+    ACTIONS(53), 12,
+      anon_sym_COLON_COLON,
+      anon_sym_DASH_GT,
+      anon_sym_LT_DASH,
+      anon_sym_TILDE_GT,
+      anon_sym_LT_TILDE,
+      anon_sym_PLUS_GT,
+      anon_sym_LT_PLUS,
+      anon_sym_POUND,
+      anon_sym_PLUS,
+      anon_sym_DASH,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [207] = 9,
+    ACTIONS(57), 1,
+      anon_sym_LPAREN,
+    ACTIONS(59), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(61), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(63), 1,
+      anon_sym_LT,
+    STATE(15), 1,
+      sym_type_annotation,
+    STATE(27), 1,
+      sym_parameter_list,
+    STATE(39), 1,
+      sym_return_statement,
+    STATE(75), 1,
+      sym_throw_statement,
+    ACTIONS(55), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [238] = 8,
+    ACTIONS(57), 1,
+      anon_sym_LPAREN,
+    ACTIONS(59), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(63), 1,
+      anon_sym_LT,
+    STATE(16), 1,
+      sym_type_annotation,
+    STATE(23), 1,
+      sym_parameter_list,
+    STATE(42), 1,
+      sym_return_statement,
+    STATE(75), 1,
+      sym_throw_statement,
+    ACTIONS(55), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [267] = 9,
+    ACTIONS(55), 1,
+      sym__newline,
+    ACTIONS(67), 1,
+      anon_sym_LPAREN,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(71), 1,
+      anon_sym_LT,
+    STATE(20), 1,
+      sym_type_annotation,
+    STATE(31), 1,
+      sym_parameter_list,
+    STATE(69), 1,
+      sym_return_statement,
+    STATE(103), 1,
+      sym_throw_statement,
+    ACTIONS(65), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [297] = 10,
+    ACTIONS(55), 1,
+      sym__newline,
+    ACTIONS(67), 1,
+      anon_sym_LPAREN,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(71), 1,
+      anon_sym_LT,
+    ACTIONS(73), 1,
+      anon_sym_POUND_GT,
+    STATE(19), 1,
+      sym_type_annotation,
+    STATE(33), 1,
+      sym_parameter_list,
+    STATE(57), 1,
+      sym_return_statement,
+    STATE(103), 1,
+      sym_throw_statement,
+    ACTIONS(65), 2,
+      anon_sym_DOT,
+      anon_sym_COMMA,
+  [329] = 7,
+    ACTIONS(57), 1,
+      anon_sym_LPAREN,
+    ACTIONS(59), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(61), 1,
+      anon_sym_POUND_GT,
+    STATE(26), 1,
+      sym_parameter_list,
+    STATE(35), 1,
+      sym_return_statement,
+    STATE(72), 1,
+      sym_throw_statement,
+    ACTIONS(75), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [354] = 6,
+    ACTIONS(57), 1,
+      anon_sym_LPAREN,
+    ACTIONS(59), 1,
+      anon_sym_EQ_GT,
+    STATE(25), 1,
+      sym_parameter_list,
+    STATE(44), 1,
+      sym_return_statement,
+    STATE(72), 1,
+      sym_throw_statement,
+    ACTIONS(75), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [377] = 10,
+    ACTIONS(55), 1,
+      sym__newline,
+    ACTIONS(65), 1,
+      anon_sym_DOT,
+    ACTIONS(67), 1,
+      anon_sym_LPAREN,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(71), 1,
+      anon_sym_LT,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    STATE(24), 1,
+      sym_type_annotation,
+    STATE(46), 1,
+      sym_parameter_list,
+    STATE(102), 1,
+      sym_return_statement,
+    STATE(103), 1,
+      sym_throw_statement,
+  [408] = 9,
+    ACTIONS(67), 1,
+      anon_sym_LPAREN,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(71), 1,
+      anon_sym_LT,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(79), 1,
+      sym__newline,
+    STATE(30), 1,
+      sym_type_annotation,
+    STATE(62), 1,
+      sym_parameter_list,
+    STATE(111), 1,
+      sym_return_statement,
+    STATE(137), 1,
+      sym_throw_statement,
+  [436] = 8,
+    ACTIONS(67), 1,
+      anon_sym_LPAREN,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(73), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(75), 1,
+      sym__newline,
+    STATE(28), 1,
+      sym_parameter_list,
+    STATE(55), 1,
+      sym_return_statement,
+    STATE(94), 1,
+      sym_throw_statement,
+    ACTIONS(81), 2,
+      anon_sym_DOT,
+      anon_sym_COMMA,
+  [462] = 7,
+    ACTIONS(67), 1,
+      anon_sym_LPAREN,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(75), 1,
+      sym__newline,
+    STATE(29), 1,
+      sym_parameter_list,
+    STATE(66), 1,
+      sym_return_statement,
+    STATE(94), 1,
+      sym_throw_statement,
+    ACTIONS(81), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [486] = 7,
+    ACTIONS(5), 1,
+      anon_sym_SLASH_SLASH,
+    ACTIONS(7), 1,
+      sym__label,
+    ACTIONS(83), 1,
+      ts_builtin_sym_end,
+    STATE(22), 1,
+      aux_sym_source_file_repeat2,
+    STATE(115), 1,
+      sym_identifier,
+    STATE(140), 1,
+      sym_entry,
+    STATE(53), 2,
+      sym_definition,
+      sym_comment,
+  [509] = 7,
+    ACTIONS(85), 1,
+      ts_builtin_sym_end,
+    ACTIONS(87), 1,
+      anon_sym_SLASH_SLASH,
+    ACTIONS(90), 1,
+      sym__label,
+    STATE(22), 1,
+      aux_sym_source_file_repeat2,
+    STATE(115), 1,
+      sym_identifier,
+    STATE(140), 1,
+      sym_entry,
+    STATE(53), 2,
+      sym_definition,
+      sym_comment,
+  [532] = 4,
+    ACTIONS(59), 1,
+      anon_sym_EQ_GT,
+    STATE(44), 1,
+      sym_return_statement,
+    STATE(72), 1,
+      sym_throw_statement,
+    ACTIONS(75), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [549] = 8,
+    ACTIONS(67), 1,
+      anon_sym_LPAREN,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(75), 1,
+      sym__newline,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(81), 1,
+      anon_sym_DOT,
+    STATE(38), 1,
+      sym_parameter_list,
+    STATE(94), 1,
+      sym_throw_statement,
+    STATE(95), 1,
+      sym_return_statement,
+  [574] = 4,
+    ACTIONS(59), 1,
+      anon_sym_EQ_GT,
+    STATE(34), 1,
+      sym_return_statement,
+    STATE(81), 1,
+      sym_throw_statement,
+    ACTIONS(93), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [591] = 5,
+    ACTIONS(59), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(61), 1,
+      anon_sym_POUND_GT,
+    STATE(40), 1,
+      sym_return_statement,
+    STATE(81), 1,
+      sym_throw_statement,
+    ACTIONS(93), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [610] = 5,
+    ACTIONS(59), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(61), 1,
+      anon_sym_POUND_GT,
+    STATE(35), 1,
+      sym_return_statement,
+    STATE(72), 1,
+      sym_throw_statement,
+    ACTIONS(75), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [629] = 6,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(73), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(93), 1,
+      sym__newline,
+    STATE(54), 1,
+      sym_return_statement,
+    STATE(101), 1,
+      sym_throw_statement,
+    ACTIONS(95), 2,
+      anon_sym_DOT,
+      anon_sym_COMMA,
+  [649] = 5,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(93), 1,
+      sym__newline,
+    STATE(50), 1,
+      sym_return_statement,
+    STATE(101), 1,
+      sym_throw_statement,
+    ACTIONS(95), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [667] = 7,
+    ACTIONS(67), 1,
+      anon_sym_LPAREN,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(97), 1,
+      sym__newline,
+    STATE(67), 1,
+      sym_parameter_list,
+    STATE(110), 1,
+      sym_return_statement,
+    STATE(138), 1,
+      sym_throw_statement,
+  [689] = 5,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(75), 1,
+      sym__newline,
+    STATE(66), 1,
+      sym_return_statement,
+    STATE(94), 1,
+      sym_throw_statement,
+    ACTIONS(81), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [707] = 1,
+    ACTIONS(99), 7,
+      anon_sym_DOT,
+      anon_sym_LPAREN,
+      anon_sym_RPAREN,
+      anon_sym_EQ_GT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [717] = 6,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(73), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(75), 1,
+      sym__newline,
+    STATE(55), 1,
+      sym_return_statement,
+    STATE(94), 1,
+      sym_throw_statement,
+    ACTIONS(81), 2,
+      anon_sym_DOT,
+      anon_sym_COMMA,
+  [737] = 2,
+    STATE(70), 1,
+      sym_throw_statement,
+    ACTIONS(101), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [748] = 3,
+    ACTIONS(61), 1,
+      anon_sym_POUND_GT,
+    STATE(81), 1,
+      sym_throw_statement,
+    ACTIONS(93), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [761] = 1,
+    ACTIONS(103), 6,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_EQ_GT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [770] = 1,
+    ACTIONS(105), 6,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_EQ_GT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [779] = 6,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(93), 1,
+      sym__newline,
+    ACTIONS(95), 1,
+      anon_sym_DOT,
+    STATE(101), 1,
+      sym_throw_statement,
+    STATE(105), 1,
+      sym_return_statement,
+  [798] = 3,
+    ACTIONS(61), 1,
+      anon_sym_POUND_GT,
+    STATE(72), 1,
+      sym_throw_statement,
+    ACTIONS(75), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [811] = 3,
+    ACTIONS(61), 1,
+      anon_sym_POUND_GT,
+    STATE(70), 1,
+      sym_throw_statement,
+    ACTIONS(101), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [824] = 2,
+    STATE(48), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(107), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [835] = 2,
+    STATE(72), 1,
+      sym_throw_statement,
+    ACTIONS(75), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [846] = 3,
+    ACTIONS(109), 1,
+      anon_sym_DOT,
+    STATE(47), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(111), 4,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [859] = 2,
+    STATE(81), 1,
+      sym_throw_statement,
+    ACTIONS(93), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [870] = 2,
+    ACTIONS(99), 1,
+      sym__newline,
+    ACTIONS(113), 5,
+      anon_sym_DOT,
+      anon_sym_LPAREN,
+      anon_sym_EQ_GT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [881] = 6,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(75), 1,
+      sym__newline,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(81), 1,
+      anon_sym_DOT,
+    STATE(94), 1,
+      sym_throw_statement,
+    STATE(95), 1,
+      sym_return_statement,
+  [900] = 3,
+    ACTIONS(115), 1,
+      anon_sym_DOT,
+    STATE(47), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(118), 4,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [913] = 3,
+    ACTIONS(122), 1,
+      anon_sym_COMMA,
+    STATE(48), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(120), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_GT,
+  [926] = 3,
+    ACTIONS(109), 1,
+      anon_sym_DOT,
+    STATE(43), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(125), 4,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [939] = 3,
+    ACTIONS(101), 1,
+      sym__newline,
+    STATE(104), 1,
+      sym_throw_statement,
+    ACTIONS(127), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [951] = 3,
+    ACTIONS(129), 1,
+      anon_sym_COMMA,
+    STATE(51), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(120), 3,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_GT,
+  [963] = 3,
+    ACTIONS(107), 1,
+      sym__newline,
+    STATE(63), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(132), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [975] = 4,
+    ACTIONS(134), 1,
+      ts_builtin_sym_end,
+    ACTIONS(138), 1,
+      sym__newline,
+    STATE(60), 1,
+      aux_sym_source_file_repeat1,
+    ACTIONS(136), 2,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [989] = 4,
+    ACTIONS(73), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(101), 1,
+      sym__newline,
+    STATE(104), 1,
+      sym_throw_statement,
+    ACTIONS(127), 2,
+      anon_sym_DOT,
+      anon_sym_COMMA,
+  [1003] = 4,
+    ACTIONS(73), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(93), 1,
+      sym__newline,
+    STATE(101), 1,
+      sym_throw_statement,
+    ACTIONS(95), 2,
+      anon_sym_DOT,
+      anon_sym_COMMA,
+  [1017] = 4,
+    ACTIONS(142), 1,
+      anon_sym_COMMA,
+    ACTIONS(144), 1,
+      sym__newline,
+    STATE(59), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(140), 2,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+  [1031] = 4,
+    ACTIONS(73), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(75), 1,
+      sym__newline,
+    STATE(94), 1,
+      sym_throw_statement,
+    ACTIONS(81), 2,
+      anon_sym_DOT,
+      anon_sym_COMMA,
+  [1045] = 4,
+    ACTIONS(125), 1,
+      sym__newline,
+    ACTIONS(146), 1,
+      anon_sym_DOT,
+    STATE(78), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(148), 2,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1059] = 4,
+    ACTIONS(107), 1,
+      sym__newline,
+    ACTIONS(142), 1,
+      anon_sym_COMMA,
+    STATE(63), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(132), 2,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+  [1073] = 4,
+    ACTIONS(85), 1,
+      ts_builtin_sym_end,
+    ACTIONS(152), 1,
+      sym__newline,
+    STATE(79), 1,
+      aux_sym_source_file_repeat1,
+    ACTIONS(150), 2,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [1087] = 2,
+    ACTIONS(103), 1,
+      sym__newline,
+    ACTIONS(154), 4,
+      anon_sym_DOT,
+      anon_sym_EQ_GT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1097] = 5,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(97), 1,
+      sym__newline,
+    STATE(110), 1,
+      sym_return_statement,
+    STATE(138), 1,
+      sym_throw_statement,
+  [1113] = 4,
+    ACTIONS(120), 1,
+      sym__newline,
+    ACTIONS(158), 1,
+      anon_sym_COMMA,
+    STATE(63), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(156), 2,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+  [1127] = 2,
+    STATE(51), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(107), 4,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1137] = 3,
+    ACTIONS(161), 1,
+      anon_sym_DOT,
+    STATE(65), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(118), 3,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1149] = 3,
+    ACTIONS(93), 1,
+      sym__newline,
+    STATE(101), 1,
+      sym_throw_statement,
+    ACTIONS(95), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1161] = 5,
+    ACTIONS(69), 1,
+      anon_sym_EQ_GT,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(164), 1,
+      sym__newline,
+    STATE(116), 1,
+      sym_return_statement,
+    STATE(139), 1,
+      sym_throw_statement,
+  [1177] = 3,
+    ACTIONS(166), 1,
+      anon_sym_DOT,
+    STATE(65), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(111), 3,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1189] = 3,
+    ACTIONS(75), 1,
+      sym__newline,
+    STATE(94), 1,
+      sym_throw_statement,
+    ACTIONS(81), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1201] = 1,
+    ACTIONS(168), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1209] = 3,
+    ACTIONS(166), 1,
+      anon_sym_DOT,
+    STATE(68), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(125), 3,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1221] = 1,
+    ACTIONS(93), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1229] = 1,
+    ACTIONS(120), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1237] = 2,
+    ACTIONS(105), 1,
+      sym__newline,
+    ACTIONS(170), 4,
+      anon_sym_DOT,
+      anon_sym_EQ_GT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1247] = 1,
+    ACTIONS(75), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1255] = 1,
+    ACTIONS(118), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1263] = 4,
+    ACTIONS(118), 1,
+      sym__newline,
+    ACTIONS(172), 1,
+      anon_sym_DOT,
+    STATE(77), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(175), 2,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1277] = 4,
+    ACTIONS(111), 1,
+      sym__newline,
+    ACTIONS(146), 1,
+      anon_sym_DOT,
+    STATE(77), 1,
+      aux_sym_entry_repeat1,
+    ACTIONS(177), 2,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1291] = 4,
+    ACTIONS(179), 1,
+      ts_builtin_sym_end,
+    ACTIONS(183), 1,
+      sym__newline,
+    STATE(79), 1,
+      aux_sym_source_file_repeat1,
+    ACTIONS(181), 2,
+      anon_sym_SLASH_SLASH,
+      sym__label,
+  [1305] = 1,
+    ACTIONS(186), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1313] = 1,
+    ACTIONS(101), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1321] = 1,
+    ACTIONS(188), 5,
+      anon_sym_DOT,
+      anon_sym_RPAREN,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+      anon_sym_GT,
+  [1329] = 2,
+    ACTIONS(188), 1,
+      sym__newline,
+    ACTIONS(190), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1338] = 2,
+    ACTIONS(186), 1,
+      sym__newline,
+    ACTIONS(192), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1347] = 4,
+    ACTIONS(125), 1,
+      sym__newline,
+    ACTIONS(148), 1,
+      anon_sym_COMMA,
+    ACTIONS(194), 1,
+      anon_sym_DOT,
+    STATE(90), 1,
+      aux_sym_entry_repeat1,
+  [1360] = 4,
+    ACTIONS(196), 1,
+      anon_sym_RPAREN,
+    ACTIONS(198), 1,
+      sym__label,
+    STATE(108), 1,
+      sym_identifier,
+    STATE(135), 1,
+      sym__identifier_list,
+  [1373] = 4,
+    ACTIONS(118), 1,
+      sym__newline,
+    ACTIONS(175), 1,
+      anon_sym_COMMA,
+    ACTIONS(200), 1,
+      anon_sym_DOT,
+    STATE(87), 1,
+      aux_sym_entry_repeat1,
+  [1386] = 2,
+    ACTIONS(118), 1,
+      sym__newline,
+    ACTIONS(175), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1395] = 2,
+    ACTIONS(120), 1,
+      sym__newline,
+    ACTIONS(156), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1404] = 4,
+    ACTIONS(111), 1,
+      sym__newline,
+    ACTIONS(177), 1,
+      anon_sym_COMMA,
+    ACTIONS(194), 1,
+      anon_sym_DOT,
+    STATE(87), 1,
+      aux_sym_entry_repeat1,
+  [1417] = 4,
+    ACTIONS(198), 1,
+      sym__label,
+    STATE(71), 1,
+      sym_identifier,
+    STATE(123), 1,
+      sym_entry,
+    STATE(136), 1,
+      sym__entry_list,
+  [1430] = 3,
+    ACTIONS(107), 1,
+      sym__newline,
+    STATE(96), 1,
+      aux_sym__entry_list_repeat1,
+    ACTIONS(132), 2,
+      anon_sym_DOT,
+      anon_sym_COMMA,
+  [1441] = 4,
+    ACTIONS(203), 1,
+      sym__label,
+    STATE(83), 1,
+      sym__entry_list,
+    STATE(85), 1,
+      sym_identifier,
+    STATE(100), 1,
+      sym_entry,
+  [1454] = 2,
+    ACTIONS(93), 1,
+      sym__newline,
+    ACTIONS(95), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1463] = 4,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(93), 1,
+      sym__newline,
+    ACTIONS(95), 1,
+      anon_sym_DOT,
+    STATE(101), 1,
+      sym_throw_statement,
+  [1476] = 4,
+    ACTIONS(120), 1,
+      sym__newline,
+    ACTIONS(156), 1,
+      anon_sym_DOT,
+    ACTIONS(205), 1,
+      anon_sym_COMMA,
+    STATE(96), 1,
+      aux_sym__entry_list_repeat1,
+  [1489] = 4,
+    ACTIONS(198), 1,
+      sym__label,
+    STATE(71), 1,
+      sym_identifier,
+    STATE(123), 1,
+      sym_entry,
+    STATE(143), 1,
+      sym__entry_list,
+  [1502] = 3,
+    ACTIONS(198), 1,
+      sym__label,
+    STATE(71), 1,
+      sym_identifier,
+    STATE(82), 2,
+      sym_entry,
+      sym__entry_list,
+  [1513] = 4,
+    ACTIONS(107), 1,
+      sym__newline,
+    ACTIONS(132), 1,
+      anon_sym_DOT,
+    ACTIONS(208), 1,
+      anon_sym_COMMA,
+    STATE(96), 1,
+      aux_sym__entry_list_repeat1,
+  [1526] = 4,
+    ACTIONS(140), 1,
+      anon_sym_DOT,
+    ACTIONS(144), 1,
+      sym__newline,
+    ACTIONS(208), 1,
+      anon_sym_COMMA,
+    STATE(99), 1,
+      aux_sym__entry_list_repeat1,
+  [1539] = 2,
+    ACTIONS(101), 1,
+      sym__newline,
+    ACTIONS(127), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1548] = 4,
+    ACTIONS(75), 1,
+      sym__newline,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(81), 1,
+      anon_sym_DOT,
+    STATE(94), 1,
+      sym_throw_statement,
+  [1561] = 2,
+    ACTIONS(75), 1,
+      sym__newline,
+    ACTIONS(81), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1570] = 2,
+    ACTIONS(168), 1,
+      sym__newline,
+    ACTIONS(210), 3,
+      anon_sym_DOT,
+      anon_sym_POUND_GT,
+      anon_sym_COMMA,
+  [1579] = 4,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(101), 1,
+      sym__newline,
+    ACTIONS(127), 1,
+      anon_sym_DOT,
+    STATE(104), 1,
+      sym_throw_statement,
+  [1592] = 3,
+    ACTIONS(203), 1,
+      sym__label,
+    STATE(85), 1,
+      sym_identifier,
+    STATE(83), 2,
+      sym_entry,
+      sym__entry_list,
+  [1603] = 4,
+    ACTIONS(198), 1,
+      sym__label,
+    ACTIONS(212), 1,
+      anon_sym_RPAREN,
+    STATE(108), 1,
+      sym_identifier,
+    STATE(133), 1,
+      sym__identifier_list,
+  [1616] = 3,
+    ACTIONS(214), 1,
+      anon_sym_RPAREN,
+    ACTIONS(216), 1,
+      anon_sym_COMMA,
+    STATE(119), 1,
+      aux_sym__identifier_list_repeat1,
+  [1626] = 3,
+    ACTIONS(218), 1,
+      anon_sym_RPAREN,
+    ACTIONS(220), 1,
+      anon_sym_COMMA,
+    STATE(109), 1,
+      aux_sym__identifier_list_repeat1,
+  [1636] = 3,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(164), 1,
+      sym__newline,
+    STATE(139), 1,
+      sym_throw_statement,
+  [1646] = 3,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(97), 1,
+      sym__newline,
+    STATE(138), 1,
+      sym_throw_statement,
+  [1656] = 3,
+    ACTIONS(111), 1,
+      sym__newline,
+    ACTIONS(223), 1,
+      anon_sym_DOT,
+    STATE(124), 1,
+      aux_sym_entry_repeat1,
+  [1666] = 3,
+    ACTIONS(225), 1,
+      sym__label,
+    STATE(58), 1,
+      sym_identifier,
+    STATE(89), 1,
+      sym_entry,
+  [1676] = 3,
+    ACTIONS(227), 1,
+      sym__label,
+    STATE(49), 1,
+      sym_identifier,
+    STATE(80), 1,
+      sym_entry,
+  [1686] = 3,
+    ACTIONS(125), 1,
+      sym__newline,
+    ACTIONS(223), 1,
+      anon_sym_DOT,
+    STATE(112), 1,
+      aux_sym_entry_repeat1,
+  [1696] = 3,
+    ACTIONS(77), 1,
+      anon_sym_POUND_GT,
+    ACTIONS(229), 1,
+      sym__newline,
+    STATE(141), 1,
+      sym_throw_statement,
+  [1706] = 3,
+    ACTIONS(203), 1,
+      sym__label,
+    STATE(85), 1,
+      sym_identifier,
+    STATE(89), 1,
+      sym_entry,
+  [1716] = 3,
+    ACTIONS(227), 1,
+      sym__label,
+    STATE(49), 1,
+      sym_identifier,
+    STATE(73), 1,
+      sym_entry,
+  [1726] = 3,
+    ACTIONS(216), 1,
+      anon_sym_COMMA,
+    ACTIONS(231), 1,
+      anon_sym_RPAREN,
+    STATE(109), 1,
+      aux_sym__identifier_list_repeat1,
+  [1736] = 3,
+    ACTIONS(107), 1,
+      anon_sym_GT,
+    ACTIONS(233), 1,
+      anon_sym_COMMA,
+    STATE(51), 1,
+      aux_sym__entry_list_repeat1,
+  [1746] = 3,
+    ACTIONS(225), 1,
+      sym__label,
+    STATE(58), 1,
+      sym_identifier,
+    STATE(84), 1,
+      sym_entry,
+  [1756] = 3,
+    ACTIONS(198), 1,
+      sym__label,
+    STATE(71), 1,
+      sym_identifier,
+    STATE(73), 1,
+      sym_entry,
+  [1766] = 3,
+    ACTIONS(144), 1,
+      anon_sym_GT,
+    ACTIONS(233), 1,
+      anon_sym_COMMA,
+    STATE(120), 1,
+      aux_sym__entry_list_repeat1,
+  [1776] = 3,
+    ACTIONS(118), 1,
+      sym__newline,
+    ACTIONS(235), 1,
+      anon_sym_DOT,
+    STATE(124), 1,
+      aux_sym_entry_repeat1,
+  [1786] = 2,
+    ACTIONS(198), 1,
+      sym__label,
+    STATE(127), 1,
+      sym_identifier,
+  [1793] = 2,
+    ACTIONS(7), 1,
+      sym__label,
+    STATE(88), 1,
+      sym_identifier,
+  [1800] = 1,
+    ACTIONS(218), 2,
+      anon_sym_RPAREN,
+      anon_sym_COMMA,
+  [1805] = 2,
+    ACTIONS(227), 1,
+      sym__label,
+    STATE(76), 1,
+      sym_identifier,
+  [1812] = 2,
+    ACTIONS(198), 1,
+      sym__label,
+    STATE(76), 1,
+      sym_identifier,
+  [1819] = 2,
+    ACTIONS(203), 1,
+      sym__label,
+    STATE(88), 1,
+      sym_identifier,
+  [1826] = 2,
+    ACTIONS(225), 1,
+      sym__label,
+    STATE(88), 1,
+      sym_identifier,
+  [1833] = 1,
+    ACTIONS(238), 1,
+      aux_sym_comment_token1,
+  [1837] = 1,
+    ACTIONS(240), 1,
+      anon_sym_RPAREN,
+  [1841] = 1,
+    ACTIONS(242), 1,
+      sym__newline,
+  [1845] = 1,
+    ACTIONS(244), 1,
+      anon_sym_RPAREN,
+  [1849] = 1,
+    ACTIONS(246), 1,
+      anon_sym_GT,
+  [1853] = 1,
+    ACTIONS(97), 1,
+      sym__newline,
+  [1857] = 1,
+    ACTIONS(164), 1,
+      sym__newline,
+  [1861] = 1,
+    ACTIONS(229), 1,
+      sym__newline,
+  [1865] = 1,
+    ACTIONS(248), 1,
+      sym__newline,
+  [1869] = 1,
+    ACTIONS(250), 1,
+      sym__newline,
+  [1873] = 1,
+    ACTIONS(252), 1,
+      ts_builtin_sym_end,
+  [1877] = 1,
+    ACTIONS(254), 1,
+      anon_sym_GT,
+  [1881] = 1,
+    ACTIONS(256), 1,
+      sym__label,
+  [1885] = 1,
+    ACTIONS(258), 1,
+      sym__label,
+};
+
+static const uint32_t ts_small_parse_table_map[] = {
+  [SMALL_STATE(2)] = 0,
+  [SMALL_STATE(3)] = 31,
+  [SMALL_STATE(4)] = 62,
+  [SMALL_STATE(5)] = 93,
+  [SMALL_STATE(6)] = 112,
+  [SMALL_STATE(7)] = 131,
+  [SMALL_STATE(8)] = 150,
+  [SMALL_STATE(9)] = 169,
+  [SMALL_STATE(10)] = 188,
+  [SMALL_STATE(11)] = 207,
+  [SMALL_STATE(12)] = 238,
+  [SMALL_STATE(13)] = 267,
+  [SMALL_STATE(14)] = 297,
+  [SMALL_STATE(15)] = 329,
+  [SMALL_STATE(16)] = 354,
+  [SMALL_STATE(17)] = 377,
+  [SMALL_STATE(18)] = 408,
+  [SMALL_STATE(19)] = 436,
+  [SMALL_STATE(20)] = 462,
+  [SMALL_STATE(21)] = 486,
+  [SMALL_STATE(22)] = 509,
+  [SMALL_STATE(23)] = 532,
+  [SMALL_STATE(24)] = 549,
+  [SMALL_STATE(25)] = 574,
+  [SMALL_STATE(26)] = 591,
+  [SMALL_STATE(27)] = 610,
+  [SMALL_STATE(28)] = 629,
+  [SMALL_STATE(29)] = 649,
+  [SMALL_STATE(30)] = 667,
+  [SMALL_STATE(31)] = 689,
+  [SMALL_STATE(32)] = 707,
+  [SMALL_STATE(33)] = 717,
+  [SMALL_STATE(34)] = 737,
+  [SMALL_STATE(35)] = 748,
+  [SMALL_STATE(36)] = 761,
+  [SMALL_STATE(37)] = 770,
+  [SMALL_STATE(38)] = 779,
+  [SMALL_STATE(39)] = 798,
+  [SMALL_STATE(40)] = 811,
+  [SMALL_STATE(41)] = 824,
+  [SMALL_STATE(42)] = 835,
+  [SMALL_STATE(43)] = 846,
+  [SMALL_STATE(44)] = 859,
+  [SMALL_STATE(45)] = 870,
+  [SMALL_STATE(46)] = 881,
+  [SMALL_STATE(47)] = 900,
+  [SMALL_STATE(48)] = 913,
+  [SMALL_STATE(49)] = 926,
+  [SMALL_STATE(50)] = 939,
+  [SMALL_STATE(51)] = 951,
+  [SMALL_STATE(52)] = 963,
+  [SMALL_STATE(53)] = 975,
+  [SMALL_STATE(54)] = 989,
+  [SMALL_STATE(55)] = 1003,
+  [SMALL_STATE(56)] = 1017,
+  [SMALL_STATE(57)] = 1031,
+  [SMALL_STATE(58)] = 1045,
+  [SMALL_STATE(59)] = 1059,
+  [SMALL_STATE(60)] = 1073,
+  [SMALL_STATE(61)] = 1087,
+  [SMALL_STATE(62)] = 1097,
+  [SMALL_STATE(63)] = 1113,
+  [SMALL_STATE(64)] = 1127,
+  [SMALL_STATE(65)] = 1137,
+  [SMALL_STATE(66)] = 1149,
+  [SMALL_STATE(67)] = 1161,
+  [SMALL_STATE(68)] = 1177,
+  [SMALL_STATE(69)] = 1189,
+  [SMALL_STATE(70)] = 1201,
+  [SMALL_STATE(71)] = 1209,
+  [SMALL_STATE(72)] = 1221,
+  [SMALL_STATE(73)] = 1229,
+  [SMALL_STATE(74)] = 1237,
+  [SMALL_STATE(75)] = 1247,
+  [SMALL_STATE(76)] = 1255,
+  [SMALL_STATE(77)] = 1263,
+  [SMALL_STATE(78)] = 1277,
+  [SMALL_STATE(79)] = 1291,
+  [SMALL_STATE(80)] = 1305,
+  [SMALL_STATE(81)] = 1313,
+  [SMALL_STATE(82)] = 1321,
+  [SMALL_STATE(83)] = 1329,
+  [SMALL_STATE(84)] = 1338,
+  [SMALL_STATE(85)] = 1347,
+  [SMALL_STATE(86)] = 1360,
+  [SMALL_STATE(87)] = 1373,
+  [SMALL_STATE(88)] = 1386,
+  [SMALL_STATE(89)] = 1395,
+  [SMALL_STATE(90)] = 1404,
+  [SMALL_STATE(91)] = 1417,
+  [SMALL_STATE(92)] = 1430,
+  [SMALL_STATE(93)] = 1441,
+  [SMALL_STATE(94)] = 1454,
+  [SMALL_STATE(95)] = 1463,
+  [SMALL_STATE(96)] = 1476,
+  [SMALL_STATE(97)] = 1489,
+  [SMALL_STATE(98)] = 1502,
+  [SMALL_STATE(99)] = 1513,
+  [SMALL_STATE(100)] = 1526,
+  [SMALL_STATE(101)] = 1539,
+  [SMALL_STATE(102)] = 1548,
+  [SMALL_STATE(103)] = 1561,
+  [SMALL_STATE(104)] = 1570,
+  [SMALL_STATE(105)] = 1579,
+  [SMALL_STATE(106)] = 1592,
+  [SMALL_STATE(107)] = 1603,
+  [SMALL_STATE(108)] = 1616,
+  [SMALL_STATE(109)] = 1626,
+  [SMALL_STATE(110)] = 1636,
+  [SMALL_STATE(111)] = 1646,
+  [SMALL_STATE(112)] = 1656,
+  [SMALL_STATE(113)] = 1666,
+  [SMALL_STATE(114)] = 1676,
+  [SMALL_STATE(115)] = 1686,
+  [SMALL_STATE(116)] = 1696,
+  [SMALL_STATE(117)] = 1706,
+  [SMALL_STATE(118)] = 1716,
+  [SMALL_STATE(119)] = 1726,
+  [SMALL_STATE(120)] = 1736,
+  [SMALL_STATE(121)] = 1746,
+  [SMALL_STATE(122)] = 1756,
+  [SMALL_STATE(123)] = 1766,
+  [SMALL_STATE(124)] = 1776,
+  [SMALL_STATE(125)] = 1786,
+  [SMALL_STATE(126)] = 1793,
+  [SMALL_STATE(127)] = 1800,
+  [SMALL_STATE(128)] = 1805,
+  [SMALL_STATE(129)] = 1812,
+  [SMALL_STATE(130)] = 1819,
+  [SMALL_STATE(131)] = 1826,
+  [SMALL_STATE(132)] = 1833,
+  [SMALL_STATE(133)] = 1837,
+  [SMALL_STATE(134)] = 1841,
+  [SMALL_STATE(135)] = 1845,
+  [SMALL_STATE(136)] = 1849,
+  [SMALL_STATE(137)] = 1853,
+  [SMALL_STATE(138)] = 1857,
+  [SMALL_STATE(139)] = 1861,
+  [SMALL_STATE(140)] = 1865,
+  [SMALL_STATE(141)] = 1869,
+  [SMALL_STATE(142)] = 1873,
+  [SMALL_STATE(143)] = 1877,
+  [SMALL_STATE(144)] = 1881,
+  [SMALL_STATE(145)] = 1885,
+};
+
+static const TSParseActionEntry ts_parse_actions[] = {
+  [0] = {.entry = {.count = 0, .reusable = false}},
+  [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(),
+  [3] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 0),
+  [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132),
+  [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),
+  [9] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_definition, 3),
+  [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144),
+  [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132),
+  [15] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_definition, 3),
+  [17] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_definition, 2),
+  [19] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_definition, 2),
+  [21] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_definition_repeat1, 2),
+  [23] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_definition_repeat1, 2), SHIFT_REPEAT(144),
+  [26] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_definition_repeat1, 2), SHIFT_REPEAT(132),
+  [29] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_definition_repeat1, 2),
+  [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member, 4),
+  [33] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member, 4),
+  [35] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member, 7),
+  [37] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member, 7),
+  [39] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member, 6),
+  [41] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member, 6),
+  [43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member, 3),
+  [45] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member, 3),
+  [47] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3),
+  [49] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 3),
+  [51] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member, 5),
+  [53] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member, 5),
+  [55] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identifier, 1),
+  [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86),
+  [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114),
+  [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98),
+  [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91),
+  [65] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identifier, 1),
+  [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT(107),
+  [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(121),
+  [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(97),
+  [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(106),
+  [75] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identifier, 2),
+  [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(93),
+  [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),
+  [81] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identifier, 2),
+  [83] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1),
+  [85] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat2, 2),
+  [87] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat2, 2), SHIFT_REPEAT(132),
+  [90] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat2, 2), SHIFT_REPEAT(17),
+  [93] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identifier, 3),
+  [95] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identifier, 3),
+  [97] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5),
+  [99] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_annotation, 3),
+  [101] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identifier, 4),
+  [103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 2),
+  [105] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 3),
+  [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__entry_list, 2),
+  [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128),
+  [111] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_entry, 2),
+  [113] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_annotation, 3),
+  [115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_entry_repeat1, 2), SHIFT_REPEAT(128),
+  [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_entry_repeat1, 2),
+  [120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__entry_list_repeat1, 2),
+  [122] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__entry_list_repeat1, 2), SHIFT_REPEAT(118),
+  [125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_entry, 1),
+  [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identifier, 4),
+  [129] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__entry_list_repeat1, 2), SHIFT_REPEAT(122),
+  [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__entry_list, 2),
+  [134] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat2, 1),
+  [136] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_source_file_repeat2, 1),
+  [138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60),
+  [140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__entry_list, 1),
+  [142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(113),
+  [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__entry_list, 1),
+  [146] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131),
+  [148] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_entry, 1),
+  [150] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_source_file_repeat2, 2),
+  [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79),
+  [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parameter_list, 2),
+  [156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__entry_list_repeat1, 2),
+  [158] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__entry_list_repeat1, 2), SHIFT_REPEAT(113),
+  [161] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_entry_repeat1, 2), SHIFT_REPEAT(129),
+  [164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10),
+  [166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129),
+  [168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identifier, 5),
+  [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parameter_list, 3),
+  [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_entry_repeat1, 2), SHIFT_REPEAT(131),
+  [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_entry_repeat1, 2),
+  [177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_entry, 2),
+  [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2),
+  [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2),
+  [183] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(79),
+  [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2),
+  [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_throw_statement, 2),
+  [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_throw_statement, 2),
+  [192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 2),
+  [194] = {.entry = {.count = 1, .reusable = false}}, SHIFT(130),
+  [196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36),
+  [198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11),
+  [200] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_entry_repeat1, 2), SHIFT_REPEAT(130),
+  [203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14),
+  [205] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__entry_list_repeat1, 2), SHIFT_REPEAT(117),
+  [208] = {.entry = {.count = 1, .reusable = false}}, SHIFT(117),
+  [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identifier, 5),
+  [212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61),
+  [214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__identifier_list, 1),
+  [216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125),
+  [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__identifier_list_repeat1, 2),
+  [220] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__identifier_list_repeat1, 2), SHIFT_REPEAT(125),
+  [223] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126),
+  [225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13),
+  [227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12),
+  [229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7),
+  [231] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__identifier_list, 2),
+  [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122),
+  [235] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_entry_repeat1, 2), SHIFT_REPEAT(126),
+  [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134),
+  [240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74),
+  [242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9),
+  [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37),
+  [246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32),
+  [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),
+  [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6),
+  [252] = {.entry = {.count = 1, .reusable = true}},  ACCEPT_INPUT(),
+  [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45),
+  [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_type, 1),
+  [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18),
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef _WIN32
+#define extern __declspec(dllexport)
+#endif
+
+extern const TSLanguage *tree_sitter_apinotation(void) {
+  static const TSLanguage language = {
+    .version = LANGUAGE_VERSION,
+    .symbol_count = SYMBOL_COUNT,
+    .alias_count = ALIAS_COUNT,
+    .token_count = TOKEN_COUNT,
+    .external_token_count = EXTERNAL_TOKEN_COUNT,
+    .state_count = STATE_COUNT,
+    .large_state_count = LARGE_STATE_COUNT,
+    .production_id_count = PRODUCTION_ID_COUNT,
+    .field_count = FIELD_COUNT,
+    .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,
+    .parse_table = &ts_parse_table[0][0],
+    .small_parse_table = ts_small_parse_table,
+    .small_parse_table_map = ts_small_parse_table_map,
+    .parse_actions = ts_parse_actions,
+    .symbol_names = ts_symbol_names,
+    .symbol_metadata = ts_symbol_metadata,
+    .public_symbol_map = ts_symbol_map,
+    .alias_map = ts_non_terminal_alias_map,
+    .alias_sequences = &ts_alias_sequences[0][0],
+    .lex_modes = ts_lex_modes,
+    .lex_fn = ts_lex,
+    .primary_state_ids = ts_primary_state_ids,
+  };
+  return &language;
+}
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/tree_sitter/parser.h b/src/tree_sitter/parser.h
new file mode 100644 (file)
index 0000000..2b14ac1
--- /dev/null
@@ -0,0 +1,224 @@
+#ifndef TREE_SITTER_PARSER_H_
+#define TREE_SITTER_PARSER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define ts_builtin_sym_error ((TSSymbol)-1)
+#define ts_builtin_sym_end 0
+#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024
+
+typedef uint16_t TSStateId;
+
+#ifndef TREE_SITTER_API_H_
+typedef uint16_t TSSymbol;
+typedef uint16_t TSFieldId;
+typedef struct TSLanguage TSLanguage;
+#endif
+
+typedef struct {
+  TSFieldId field_id;
+  uint8_t child_index;
+  bool inherited;
+} TSFieldMapEntry;
+
+typedef struct {
+  uint16_t index;
+  uint16_t length;
+} TSFieldMapSlice;
+
+typedef struct {
+  bool visible;
+  bool named;
+  bool supertype;
+} TSSymbolMetadata;
+
+typedef struct TSLexer TSLexer;
+
+struct TSLexer {
+  int32_t lookahead;
+  TSSymbol result_symbol;
+  void (*advance)(TSLexer *, bool);
+  void (*mark_end)(TSLexer *);
+  uint32_t (*get_column)(TSLexer *);
+  bool (*is_at_included_range_start)(const TSLexer *);
+  bool (*eof)(const TSLexer *);
+};
+
+typedef enum {
+  TSParseActionTypeShift,
+  TSParseActionTypeReduce,
+  TSParseActionTypeAccept,
+  TSParseActionTypeRecover,
+} TSParseActionType;
+
+typedef union {
+  struct {
+    uint8_t type;
+    TSStateId state;
+    bool extra;
+    bool repetition;
+  } shift;
+  struct {
+    uint8_t type;
+    uint8_t child_count;
+    TSSymbol symbol;
+    int16_t dynamic_precedence;
+    uint16_t production_id;
+  } reduce;
+  uint8_t type;
+} TSParseAction;
+
+typedef struct {
+  uint16_t lex_state;
+  uint16_t external_lex_state;
+} TSLexMode;
+
+typedef union {
+  TSParseAction action;
+  struct {
+    uint8_t count;
+    bool reusable;
+  } entry;
+} TSParseActionEntry;
+
+struct TSLanguage {
+  uint32_t version;
+  uint32_t symbol_count;
+  uint32_t alias_count;
+  uint32_t token_count;
+  uint32_t external_token_count;
+  uint32_t state_count;
+  uint32_t large_state_count;
+  uint32_t production_id_count;
+  uint32_t field_count;
+  uint16_t max_alias_sequence_length;
+  const uint16_t *parse_table;
+  const uint16_t *small_parse_table;
+  const uint32_t *small_parse_table_map;
+  const TSParseActionEntry *parse_actions;
+  const char * const *symbol_names;
+  const char * const *field_names;
+  const TSFieldMapSlice *field_map_slices;
+  const TSFieldMapEntry *field_map_entries;
+  const TSSymbolMetadata *symbol_metadata;
+  const TSSymbol *public_symbol_map;
+  const uint16_t *alias_map;
+  const TSSymbol *alias_sequences;
+  const TSLexMode *lex_modes;
+  bool (*lex_fn)(TSLexer *, TSStateId);
+  bool (*keyword_lex_fn)(TSLexer *, TSStateId);
+  TSSymbol keyword_capture_token;
+  struct {
+    const bool *states;
+    const TSSymbol *symbol_map;
+    void *(*create)(void);
+    void (*destroy)(void *);
+    bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist);
+    unsigned (*serialize)(void *, char *);
+    void (*deserialize)(void *, const char *, unsigned);
+  } external_scanner;
+  const TSStateId *primary_state_ids;
+};
+
+/*
+ *  Lexer Macros
+ */
+
+#define START_LEXER()           \
+  bool result = false;          \
+  bool skip = false;            \
+  bool eof = false;             \
+  int32_t lookahead;            \
+  goto start;                   \
+  next_state:                   \
+  lexer->advance(lexer, skip);  \
+  start:                        \
+  skip = false;                 \
+  lookahead = lexer->lookahead;
+
+#define ADVANCE(state_value) \
+  {                          \
+    state = state_value;     \
+    goto next_state;         \
+  }
+
+#define SKIP(state_value) \
+  {                       \
+    skip = true;          \
+    state = state_value;  \
+    goto next_state;      \
+  }
+
+#define ACCEPT_TOKEN(symbol_value)     \
+  result = true;                       \
+  lexer->result_symbol = symbol_value; \
+  lexer->mark_end(lexer);
+
+#define END_STATE() return result;
+
+/*
+ *  Parse Table Macros
+ */
+
+#define SMALL_STATE(id) id - LARGE_STATE_COUNT
+
+#define STATE(id) id
+
+#define ACTIONS(id) id
+
+#define SHIFT(state_value)            \
+  {{                                  \
+    .shift = {                        \
+      .type = TSParseActionTypeShift, \
+      .state = state_value            \
+    }                                 \
+  }}
+
+#define SHIFT_REPEAT(state_value)     \
+  {{                                  \
+    .shift = {                        \
+      .type = TSParseActionTypeShift, \
+      .state = state_value,           \
+      .repetition = true              \
+    }                                 \
+  }}
+
+#define SHIFT_EXTRA()                 \
+  {{                                  \
+    .shift = {                        \
+      .type = TSParseActionTypeShift, \
+      .extra = true                   \
+    }                                 \
+  }}
+
+#define REDUCE(symbol_val, child_count_val, ...) \
+  {{                                             \
+    .reduce = {                                  \
+      .type = TSParseActionTypeReduce,           \
+      .symbol = symbol_val,                      \
+      .child_count = child_count_val,            \
+      __VA_ARGS__                                \
+    },                                           \
+  }}
+
+#define RECOVER()                    \
+  {{                                 \
+    .type = TSParseActionTypeRecover \
+  }}
+
+#define ACCEPT_INPUT()              \
+  {{                                \
+    .type = TSParseActionTypeAccept \
+  }}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // TREE_SITTER_PARSER_H_
diff --git a/test/corpus/notation.txt b/test/corpus/notation.txt
new file mode 100644 (file)
index 0000000..435e9dc
--- /dev/null
@@ -0,0 +1,180 @@
+==================
+Block
+==================
+
+// An example
+Forum.Models.Post
+  +glyphs <Array<String>>
+  -id <UUID>
+  -created_at <Date>
+  -parent_id <UUID>
+  -text <String>
+  -author <Author>
+  // Comments are also
+  // Allowed in the middle
+  ~>textUpdated(text <String>)
+  ->authorUpdated(author <Author>)
+  <~textWillUpdate(text <String>)
+  <-postWillRender(post <Forum.Models.Post>)
+  +>authorUpdated(author <Author>)
+  <+textWillUpdate(text <String>)
+  ::getAll(parent_id <UUID>) => Promise<Array<Forum.Models.Post>> #> NotFoundError,DisplayError
+  ::get(id <UUID>) => Promise<Forum.Models.Post>
+  #update(text <String>) => Promise<void>
+  #transform(transformer <Function<T>(T) => boolean>)
+
+---
+
+(source_file
+  (comment)
+  (definition
+    (entry
+      (identifier)
+      (identifier)
+      (identifier)
+    )
+    (member
+      (member_type)
+      (type_annotation
+        (entry
+          (identifier
+            (type_annotation
+              (entry
+                (identifier)))))))
+    (member
+      (member_type)
+      (type_annotation
+        (entry
+          (identifier))))
+    (member
+      (member_type)
+      (type_annotation
+        (entry
+          (identifier))))
+    (member
+      (member_type)
+      (type_annotation
+        (entry
+          (identifier))))
+    (member
+      (member_type)
+      (type_annotation
+        (entry
+          (identifier))))
+    (member
+      (member_type)
+      (type_annotation
+        (entry
+          (identifier))))
+    (comment)
+    (comment)
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier))))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier))))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier))))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier)
+              (identifier)
+              (identifier))))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier))))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier))))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier)))))
+      (return_statement
+        (entry
+          (identifier
+            (type_annotation
+              (entry
+                (identifier
+                  (type_annotation
+                    (entry
+                      (identifier)
+                      (identifier)
+                      (identifier)))))))))
+      (throw_statement
+        (entry
+          (identifier))
+        (entry
+          (identifier))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier)))))
+      (return_statement
+        (entry
+          (identifier
+            (type_annotation
+              (entry
+                (identifier)
+                (identifier)
+                (identifier)))))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier)))))
+      (return_statement
+        (entry
+          (identifier
+            (type_annotation
+              (entry
+                (identifier)))))))
+    (member
+      (member_type)
+      (parameter_list
+        (identifier
+          (type_annotation
+            (entry
+              (identifier
+                (type_annotation
+                  (entry
+                    (identifier)))
+                (parameter_list
+                  (identifier))
+                (return_statement
+                  (entry
+                    (identifier)))))))))))
diff --git a/test/highlight/notation.api b/test/highlight/notation.api
new file mode 100644 (file)
index 0000000..b798549
--- /dev/null
@@ -0,0 +1,48 @@
+Forum.Models.Post
+// <- keyword
+//    ^ keyword
+//           ^ keyword
+  +glyphs <Array<String>>
+  //<- operator
+  //^ property
+  //      ^ type
+  //       ^ keyword
+  //            ^ type
+  //             ^ keyword
+  //                    ^ type
+
+  -id <UUID>
+  -created_at <Date>
+  -parent_id <UUID>
+  -text <String>
+  -author <Author>
+  ~>textUpdated(text <String>)
+  //<- operator
+  //^ property
+  //           ^ function
+  //            ^ parameter
+  //                 ^ type
+  //                  ^ keyword
+  //                        ^ type
+  //                         ^ function
+  ->authorUpdated(author <Author>)
+  <~textWillUpdate(text <String>)
+  <-postWillRender(post <Forum.Models.Post>)
+  +>authorUpdated(author <Author>)
+  <+textWillUpdate(text <String>)
+  ::getAll(parent_id <UUID>) => Promise<Array<Forum.Models.Post>> #> NotFoundError,DisplayError
+  //<- operator
+  //^ property
+  //      ^ function
+  //       ^ parameter
+  //                 ^ type
+  //                  ^ keyword
+  //                      ^ type
+  //                       ^ function
+  //                         ^ operator
+  //                            ^ keyword
+  //                                                              ^ operator
+  //                                                                 ^ keyword
+  ::get(id <UUID>) => Promise<Forum.Models.Post>
+  #update(text <String>) => Promise<void>
+  #transform(transformer <Function<T>(T) => boolean>)